题目描述
给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)。
本题思路
class Solution {
public:
ListNode* swapPairs(ListNode* head) {
ListNode*dummyHead=new ListNode(0);
dummyHead->next=head;
ListNode*cur=dummyHead;
while(cur->next!=nullptr&&cur->next->next!=nullptr){//while的判断条件即已经确定是两两之间的操作,只剩一个会跳出循环
ListNode*tmp=cur->next;//存储第一个节点
ListNode*tmp1=cur->next->next->next;//存储第三个节点
cur->next=cur->next->next;//虚拟头节点与第一个节点断开链接,指向第二个节点
cur->next->next=tmp;//第二个节点指向第一个节点,第二个节点与第三个节点断开链接
tmp->next=tmp1;
cur=cur->next->next;
}
return dummyHead->next;
因为在虚拟头节点指向新的第一个节点时,相当于断开以前的第一个节点的指向所以需要先存储第一个节点。
存储第三个节点也类似。