本题要求:
给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)。
输入:head = [1,2,3,4]
输出:[2,1,4,3]
示例 2:
输入:head = []
输出:[]
示例 3:
输入:head = [1]
输出:[1]
解题思路:
采用迭代法(分三步走)
首先需要创建一个虚拟头结点方便对真实头结点进行操作,再创建两个临时指针储存cur后的第一个值和cur后的第二个值,然后分别进行如图中的三步操作,更新遍历指针要跳过两位指向第三个结点,最后按照要求返回头结点。
class Solution {
public:
ListNode* swapPairs(ListNode* head) {
ListNode* dummyHead = new ListNode(0);
dummyHead->next = head;
ListNode* cur = dummyHead;
while(cur->next != nullptr && cur->next->next != nullptr){
//构建两个临时结点储存cur后的第一个值和cur后的第二个值
ListNode* temp1 = cur->next;
ListNode* temp2 = cur->next->next;
//三步走进行调换
cur->next = temp2;
temp2->next = temp1;
temp1->next = temp2->next;
// 移动两位更新cur
cur = cur->next->next;
}
//返回交换列表的头结点(头结点在虚拟结点的下一个)
return dummyHead->next;
}
};