原题链接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->2node2->next = node1;//2->1node1->next = node3;//1->3//数字顺序 0 2 1 3,下面要讨论1 3 这两个节点node0 = node1;node1 = node3;}return dummy->next; // 返回新链表的头节点}};