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* temp = head; vector<ListNode*> res; while(temp!=NULL) { res.push_back(temp); temp = temp->next; } int n = res.size()-1; int low = 0; int high = n; while(low<high) { res[low]->next = res[high]; res[high]->next = res[low+1]; low++; high--; } res[low]->next = NULL; head = res[0]; } };
原文地址:http://blog.csdn.net/shaya118/article/details/42738085