为了防止出现交换头节点的情况,我们要先保存一下头节点的位置,拿什么保存呢?
它都已经给你了,最后一个构造就可以让新的头节点链接起来。
每拿到一个节点,我们就判断一下这个节点是否为空,后面是否还有节点可以交换,如果有,我们就让它们交换,然后此时因为是已经交换过的,以上图举例.
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; } };