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;}};

浙公网安备 33010602011771号