Reorder List
生活随笔
收集整理的這篇文章主要介紹了
Reorder List
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
Given a singly linked list?L:?L0→L1→…→Ln-1→Ln,
reorder it to:?L0→Ln→L1→Ln-1→L2→Ln-2→…
You must do this in-place without altering the nodes' values.
For example,
Given?{1,2,3,4}, reorder it to?{1,4,2,3}.
先用快慢指針找到鏈表的中點,然后翻轉鏈表后半部分,再和前半部分組合。
/*** Definition for singly-linked list.* struct ListNode {* int val;* ListNode *next;* ListNode(int x) : val(x), next(NULL) {}* };*/ class Solution { public:void reorderList(ListNode* head) {if (head == NULL || head->next == NULL) return; ListNode* slow=head,*fast=head;while(fast->next && fast->next->next){slow=slow->next;fast=fast->next->next;}ListNode* list2=slow->next;slow->next=NULL;ListNode* list1=head;ListNode* cur=list2,*temp=list2->next;cur->next=NULL;while(temp){ListNode* tem=temp->next;temp->next=cur;cur=temp;temp=tem;}list2=cur;ListNode* Node1=list1,*node2=list2;while(node2){ListNode* tem1=Node1->next;ListNode* tem2=node2->next;Node1->next=node2;node2->next=tem1;Node1=tem1;node2=tem2;}} };總結
以上是生活随笔為你收集整理的Reorder List的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Insertion Sort List
- 下一篇: Reverse Linked List