首页 > 其他分享 >LeetCode:两两交换链表中的节点

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

时间:2023-02-19 12:22:05浏览次数:48  
标签:ListNode next 链表 Node1 节点 Node2 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;     } };

标签:ListNode,next,链表,Node1,节点,Node2,LeetCode
From: https://www.cnblogs.com/kknothing/p/17134526.html

相关文章