
小结:我个人认为该题巧妙之处在于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位置改变,此时应返回虚拟头节点后的节点
}
};
本文解析了一个独特的链表问题,讲解如何利用临时指针tmp1指向非传统位置进行节点交换,展示了在Solution类的swapPairs方法中如何实现这一操作。

被折叠的 条评论
为什么被折叠?



