LeetCode演算法學習(10)
阿新 • • 發佈:2018-12-29
題目描述
Swap Nodes in Pairs
Given a linked list, swap every two adjacent nodes and return its head.Example:
Given 1->2->3->4, you should return the list as 2->1->4->3.
Note:
Your algorithm should use only constant extra space.
You may not modify the values in the list’s nodes, only nodes itself may be changed.
題目大意
對相鄰的連結串列結點進行交換。
思路分析
連結串列題,關鍵在於處理好指標的變化;可以通過畫圖來找到思路。這題的關鍵在於交換完結點後的後續指標應該指向哪裡。通過分析,可以得到兩種情況:一種是後面還有不止兩個結點,另一種是後面只有一個或零個結點。處理好這個關係就能很快的解決這道問題。
關鍵程式碼
ListNode* swapPairs(ListNode* head) {
bool flag = true;
if (head == NULL) return head;
ListNode *p = head, *q = head->next;
if (p == NULL || q == NULL) return head;
ListNode *result = head->next;
ListNode *temp = q->next;
while (p != NULL && q != NULL) {
if (flag) {
q->next = p;
if (temp && temp->next)
p->next = temp->next;
else
p->next = temp;
} else {
p = temp;
if (p) q = p->next;
if (q) temp = q->next;
}
flag = !flag;
}
return result;
}
總結
連結串列複習2,需要冷靜下來,畫個圖就出來的事情。