小结:我个人认为该题巧妙之处在于tmp1的指针指向,一般在做交换时会将两指针分别指向两个节点,但是这个题中,第二个指针指向的是第三个节点,也就是将要去连接的节点。
class Solution {
public:
ListNode* swapPairs(ListNode* head) {
ListNode*dummyhead = new ListNode(0);
dummyhead->next = head;
ListNode*cur = dummyhead;
ListNode*tmp;
ListNode*tmp1;
while(cur->next != nullptr && cur->next->next != nullptr)
{
tmp = cur->next;
tmp1 = cur->next->next->next;
//连接过程都是通过cur指针来实现操作的!!!
cur->next = tmp->next;
cur->next->next = tmp;
cur->next->next->next = tmp1;
cur = cur->next->next;//cur指针指向交换后的第二个节点
}
return dummyhead->next;//交换后head位置改变,此时应返回虚拟头节点后的节点
}
};