# 题目
给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)。
24. 两两交换链表中的节点 - 力扣(LeetCode)
# 分析
用虚拟头节点方便处理
cur--》1-》2-》3
cur--》2
2--》1
1--》3
cur.next.next
class Solution { | |
public: | |
ListNode* swapPairs(ListNode* head) { | |
ListNode* dummyHead = new ListNode(0); // 设置一个虚拟头结点 | |
dummyHead->next = head; // 将虚拟头结点指向 head,这样方面后面做删除操作 | |
ListNode* cur = dummyHead; | |
while(cur->next != nullptr && cur->next->next != nullptr) { | |
ListNode* tmp = cur->next; // 记录临时节点 | |
ListNode* tmp1 = cur->next->next->next; // 记录临时节点 | |
cur->next = cur->next->next; // 步骤一 | |
cur->next->next = tmp; // 步骤二 | |
cur->next->next->next = tmp1; // 步骤三 | |
cur = cur->next->next; //cur 移动两位,准备下一轮交换 | |
} | |
return dummyHead->next; | |
} | |
}; |