143 Reorder List

Given a singly linked list L: <i>L</i>: <i>L</i>0→<i>L</i>1→…→<i>L</i><i>n</i>-1→<i>L</i>n,
reorder it to: <i>L</i>0→<i>L</i><i>n</i>→<i>L</i>1→<i>L</i><i>n</i>-1→<i>L</i>2→<i>L</i><i>n</i>-2→…

You must do this in-place without altering the nodes' values.

For example,
Given <code>{1,2,3,4}</code>, reorder it to <code>{1,4,2,3}</code>.


解題思路

這本來是一道鏈表轉換為另一個鏈表的題目。但是轉換方式過于奇葩,實在不適合鏈表來做(鏈表更適合于做插入刪除類的操做,或者是相鄰元素之間的操作),于是果斷決定先用個<code>vector</code>存起來,再進行轉換。


代碼

class Solution {
public:
    void reorderList(ListNode* head) {
        vector<int> res;
        ListNode* s = head;
        while (s != NULL){
            res.push_back(s->val); s = s->next;
        }
        int l = 0, r = res.size()-1;
        ListNode* t = head;
        while (l <= r){
            t->val = res[l++];
            t = t->next;
            if (t == NULL) break;
            t->val = res[r--];
            t = t->next;
            if (t == NULL) break;
        }
    }
};
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容