LeetCode:两两交换链表中的节点

题目描述:

给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)。

解题思路:

为了方便寻找返回的头节点,我们新建一个空的节点作为链表的第一个节点,使其next指针始终指向实际链表的第一个节点。

为了做链表的节点交换,我们创建一个tmp指针作为交换的中间介质。设Node1 = head,Node2 = head->next;

我们使tmp->next =Node2;相邻节点交换后,Node1应指向Node2的下一个节点,所以Node1->next = Node2->next;

Node2 ->next = Node1;完成节点交换。此时移动tmp指针,tmp = Node1;进行下一轮交换。

代码实现:

class Solution {
public:
    ListNode* swapPairs(ListNode* head) {
        ListNode* _dummy = new ListNode();
        _dummy->next = head;
        ListNode* tmp = _dummy;
        ListNode* cur=head;
        //ListNode* pur=head->next;
        while(cur!=nullptr && cur->next!=nullptr)
        {
            ListNode* Node1 = cur ;
            ListNode* Node2 =cur->next;
            tmp->next =Node2;
            Node1->next = Node2->next;
            Node2->next = Node1;
            tmp = Node1;
            //Node1 = Node2;
            cur=cur->next;
        }
        return _dummy->next;
    }
};
posted @ 2023-02-19 12:19  kknothing  阅读(16)  评论(0)    收藏  举报