Reorder List --LeetCode

来源:互联网 发布:魏延被谁杀 知乎 编辑:程序博客网 时间:2024/05/16 08:46

Given a singly linked list LL0L1→…→Ln-1Ln,
reorder it to: L0LnL1Ln-1L2Ln-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}.


核心在与双指针如何控制slow指针落在合适的位置,

如果需要落在中间偏左则需要从head之前的节点开始遍历;

如果需要落在中间偏右,则直接从head开始遍历。


/** * 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;        ListNode* fast=head;        while(fast && fast->next){            slow=slow->next;            fast=fast->next->next;        }                ListNode* h=slow->next;        slow->next=NULL;        stack<ListNode*> s;        while(h){            s.push(h);            h=h->next;        }                ListNode* p=head;        while(!s.empty() && p){            ListNode* tmp=s.top();            s.pop();            tmp->next=p->next;            p->next=tmp;            p=p->next->next;        }            }};



0 0
原创粉丝点击