原题链接24. 两两交换链表中的节点 - 力扣(LeetCode)
思路,请看图片的过程模拟,这里添加了一个哨兵节点0,目的是为了方便操作,得到指向1节点的指针。
class Solution {
public:
ListNode* swapPairs(ListNode* head) {
auto dummy = new ListNode(0, head); // 用哨兵节点简化代码逻辑
auto node0 = dummy;
auto node1 = head;
while (node1&&node1->next) { // 至少有两个节点
auto node2 = node1->next;//指向2的
auto node3 = node2->next;//指向3的
node0->next = node2;//0->2
node2->next = node1;//2->1
node1->next = node3;//1->3
//数字顺序 0 2 1 3,下面要讨论1 3 这两个节点
node0 = node1;
node1 = node3;
}
return dummy->next; // 返回新链表的头节点
}
};