跳转至

24.两两交换链表中的结点 (Medium)*

题目描述*

给定一个链表,两两交换其中相邻的结点,并返回交换后的链表。

不能只是单纯的改变结点内部的值,而是需要实际的进行结点交换。

示例*

给定 1->2->3->4, 你应该返回 2->1->4->3.

代码*

首先创建一个新的头结点,指向 head,依次实现两两交换。

class Solution {
public:
    ListNode* swapPairs(ListNode* head) {
        ListNode *newHead = new ListNode(-1);
        newHead->next = head;
        ListNode *p = newHead;
        while(p->next != nullptr && p->next->next != nullptr) {
            ListNode *l1 = p->next, *l2 = p->next->next;
            l1->next = l2->next;
            l2->next = l1;
            p->next = l2;
            p = l1; // 这里 l1 已经交换,相当于隔着跳。
        }
        return newHead->next;
    }
};

执行用时:0ms

内存消耗:8.7MB


最后更新: July 23, 2022