题目链接:两两交换链表中的节点
注意
本题给的链表不带头节点,我们可以自己加上一个辅助头节点,来统一链表中各个位置的节点的处理方式。
交换两个节点的时候一定要注意步骤的顺序。
代码
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode() : val(0), next(nullptr) {}
* ListNode(int x) : val(x), next(nullptr) {}
* ListNode(int x, ListNode *next) : val(x), next(next) {}
* };
*/
class Solution {
public:
ListNode* swapPairs(ListNode* head) {
ListNode * temp = new ListNode;
if (head == nullptr) return head;
temp->next = head;
ListNode * cur = head;
ListNode * pre = temp;
while (cur) {
ListNode * node1 = cur;
cur = cur->next;
if (cur == nullptr) break;
ListNode * node2 = cur;
cur = cur->next;
pre->next = node2;
node1->next = cur;
node2->next = node1;
pre = node1;
}
head = temp->next;
delete temp;
return head;
}
};