【LeetCode】Swap Nodes in Pairs(兩兩交換連結串列中的節點)
阿新 • • 發佈:2018-12-01
這是LeetCode裡的第24題。
題目要求:
給定一個連結串列,兩兩交換其中相鄰的節點,並返回交換後的連結串列。
示例:
給定1->2->3->4, 你應該返回2->1->4->3.說明:
- 你的演算法只能使用常數的額外空間。
- 你不能只是單純的改變節點內部的值,而是需要實際的進行節點交換。
這道題還是很簡單的,題目說明也很清晰。畫畫圖就能完成題目了。
設計思路:
首先是判斷連結串列是否為空(被空連結串列弄出了潛意識),然後兩節點,一個front前節點,一個back後節點。再一個節點記錄他們的前節點,以便於連線。,就是這樣:
/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */ class Solution { public: ListNode* swapPairs(ListNode* head) { if(head==NULL)return head; if(head->next==NULL)return head; ListNode *front,*back,*r; front=head;back=head->next;r=NULL; while(front!=NULL&&back!=NULL){ if(front==head){//頭節點特殊對待! front->next=back->next; back->next=front; head=back; } else{ front->next=back->next; back->next=front; r->next=back; } r=front; front=r->next; if(front==NULL)break; back=front->next; } return head; } };
貼個結果:
個人總結:
題目簡單,思路清晰,可以使用遞迴方法解決,從後面開始交換,程式碼會更簡潔。