力扣 hot100 Day33
24. 两两交换链表中的节点
给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)。
//抄的
class Solution {
public:ListNode* swapPairs(ListNode* head) {ListNode* dummy = new ListNode(0);dummy->next = head;ListNode* prev = dummy;while (head && head->next) {ListNode* first = head;ListNode* second = head->next;// 交换prev->next = second;first->next = second->next;second->next = first;// 更新指针prev = first;head = first->next;} return dummy->next;}
};
难搞,自己写的总是很难处理好所有边界条件
这里记录了前节点,防止链表断裂,引入虚头节点,方便统一处理
以后涉及交换节点,都把前中后各个节点都记录下,应该是比较完备的做法