思路简单,但是操作的时候还是要注意细节,特别是某些结点的next指针变化需要格外关注,报了很多次错。因为没注意到:每次替换两个结点后,应该让当前的后面的结点指向下两个结点的靠后一点的结点。主要还是画完图后没有走一遍链表
class Solution {
public:
ListNode* swapPairs(ListNode* head) {
ListNode* left = head;
if (left== NULL) return head;
ListNode* right = left->next;
if (right == NULL) return head;
ListNode* newhead = right;
while(left != nullptr && left->next != nullptr)
{
left->next = right->next;
right->next = left;
ListNode* temp1 = left->next;
if(temp1 == NULL) break;
else
{
ListNode* temp2 = temp1->next;
if(temp2 == NULL) break;
else
{
left->next = temp2;//如果没有这一步就会导致链表断开
left = temp1;
right = temp2;
}
}
}
return newhead;
}
};
后面去看了别人使用虚拟头结点代码,思路也是差不多。不过确实要简洁不少
标签:24,结点,right,ListNode,next,链表,节点,left
From: https://www.cnblogs.com/gqzz/p/18651108