1. 程式人生 > >LeetCode演算法學習(10)

LeetCode演算法學習(10)

題目描述

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,需要冷靜下來,畫個圖就出來的事情。