本文首發於公衆號「五分鐘學算法」,是圖解 LeetCode 系列文章之一。node
我的網站:www.cxyxiaowu.comgit
題目來源於 LeetCode 上第 24 號問題:兩兩交換鏈表中的節點。題目難度爲 Medium,目前經過率爲 45.8% 。github
給定一個鏈表,兩兩交換其中相鄰的節點,並返回交換後的鏈表。算法
你不能只是單純的改變節點內部的值,而是須要實際的進行節點交換。bash
示例:動畫
給定 1->2->3->4, 你應該返回 2->1->4->3.
複製代碼
該題屬於基本的鏈表操做題。網站
dummyHead
node1
、node2
,同時設置node2
的下一個節點next
node2
節點的next設置爲node1
節點node1
節點的next設置爲next
節點dummyHead
節點的next設置爲node2
接下來的每輪操做都按照上述進行。ui
// 24. Swap Nodes in Pairs
// https://leetcode.com/problems/swap-nodes-in-pairs/description/
// 時間複雜度: O(n)
// 空間複雜度: O(1)
class Solution {
public:
ListNode* swapPairs(ListNode* head) {
ListNode* dummyHead = new ListNode(0);
dummyHead->next = head;
ListNode* p = dummyHead;
while(p->next && p->next->next){
ListNode* node1 = p->next;
ListNode* node2 = node1->next;
ListNode* next = node2->next;
node2->next = node1;
node1->next = next;
p->next = node2;
p = node1;
}
ListNode* retHead = dummyHead->next;
delete dummyHead;
return retHead;
}
};
複製代碼