考点
- 虚拟头结点的使用
思路
这道题其实很简单,只要能想明白两两交换链表中的结点,其实和它们两相关的下一个结点势必会被波及到,想通这一点就好了
整个交换过程为:
1.**保存cur(dummy head)的下个结点为s1,下下个结点为s2,下下下个结点为tmp**
2. cur->next = s2
3. cur->next->next = s1;
4. cur = cur->next->next;
5. cur->next = tmp;
written by myself
class Solution {
public:
ListNode* swapPairs(ListNode* head)
{
if(head == nullptr || head->next == nullptr) return head;
ListNode *dummtHead = new ListNode(0);
ListNode *cur = dummtHead;
cur->next = head;
while(cur->next != nullptr)
{
if(cur->next->next != nullptr)
{
ListNode *s1 = cur->next;
ListNode *s2 = cur->next->next;
ListNode *tmp = s2->next;
cur->next = s2;
cur->next->next = s1;
cur = cur->next->next;
cur->next = tmp;
}
else
cur = cur->next;
}
return dummtHead->next;
}
};