Leetcode 143 Reorder List
题目:Given a singly linked list L: L0→L1→…→Ln-1→Ln,
reorder it to: L0→Ln→L1→Ln-1→L2→Ln-2→…
原题链接
/**
* 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) {
//special situation
if(head==NULL) return;
//find the mid
ListNode *midhead=head, *two=head;
while(two!=NULL&&two->next!=NULL&&two->next->next!=NULL){
midhead=midhead->next;
two=two->next->next;
}
ListNode *tmp = midhead->next;
midhead->next = NULL;
midhead = tmp;
//reverse the second mid
ListNode *curr = midhead, *prev = NULL, *nex;
while(curr!=NULL){
nex=curr->next;
curr->next=prev;
prev=curr;
curr=nex;
}
//merge the two lists
ListNode *fir=head,*nexf, *sec=prev,*nexs;
while(fir!=NULL&&sec!=NULL){
nexf=fir->next;
nexs=sec->next;
fir->next=sec;
sec->next=nexf;
fir=nexf;
sec=nexs;
}
}
};