为了防止出现交换头节点的情况,我们要先保存一下头节点的位置,拿什么保存呢?
它都已经给你了,最后一个构造就可以让新的头节点链接起来。
每拿到一个节点,我们就判断一下这个节点是否为空,后面是否还有节点可以交换,如果有,我们就让它们交换,然后此时因为是已经交换过的,以上图举例.
1->next 本来应该是 2 ,但是交换过后它指向的是 3
这就方便我们直接让它往后走。
看代码:
class Solution {
public:
ListNode* swapPairs(ListNode* head) {
ListNode* new_head = new ListNode(0,head);
ListNode* prev = new_head;
ListNode* cur = head;
while(cur && cur->next != nullptr)
{
ListNode* next = cur->next;
cur->next = next->next;
next->next = cur;
prev->next = next;
prev = cur;
cur = cur->next;
}
return new_head->next;
}
};