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;}
};
難搞,自己寫的總是很難處理好所有邊界條件
這里記錄了前節點,防止鏈表斷裂,引入虛頭節點,方便統一處理
以后涉及交換節點,都把前中后各個節點都記錄下,應該是比較完備的做法