將鍊錶l0→l1→…→ln-1→ln 排列成l0→ln→l1→ln-1→l2→ln-2→
觀察第二個鍊錶是交替排列的。依次從原煉表頭取乙個,從原煉表尾取乙個。
單鏈表的最大問題就是不能夠逆向獲取節點,因此我的思路是將每乙個節點的指標儲存到vector中,這樣能夠做到隨機訪問。
給定鍊錶 1->2->3->4, 重新排列為 1->4->2->3.
給定鍊錶 1->2->3->4->5, 重新排列為 1->5->2->4->3.
判斷是否是空鍊錶或單節點的鍊錶,如是返回head;
while遍歷單鏈表,將每乙個節點的指標p儲存到vector中;
設定兩個游標pre和rear,當pre<=rear的時候進行迴圈,依次從vector中訪問元素。因為題目要求不能僅改變值,而是要對節點位置進行移動,因此vector的隨機訪問作用凸顯。
新鍊錶的newrear->next指向當前插入節點,然後將當前節點的next=null,然後向後移動乙個newrear。
void reorderlist(listnode* head)
//設定游標m和n
int m = 0,n = store.size()-1;
int count = 0;
listnode* newrear = new listnode(-1);
while(m <= n)
else
count++;
}head = newrear->next;
}
Leetcode 143 重排鍊錶
給定乙個單鏈表 l l0 l1 l n 1 ln 將其重新排列後變為 l0 l n l1 l n 1 l2 l n 2 你不能只是單純的改變節點內部的值,而是需要實際的進行節點交換。解題思路 前一半 0,size 1 2 的結點位址進入佇列,先進先出,後一半 size 1 2,size 的結點入棧,...
LeetCode 143 重排鍊錶
給定乙個單鏈表 l l0 l1 l n 1 ln 將其重新排列後變為 l0 l n l1 l n 1 l2 l n 2 你不能只是單純的改變節點內部的值,而是需要實際的進行節點交換。解題思路 首先想到的是找到要插入的元素,壓入堆疊,彈出時剛好為期望的順序,然後插入對應位置。再換一種思路,找到待插入節...
leetcode143 重排鍊錶
給定乙個單鏈表 l l0 l1 ln 1 ln 將其重新排列後變為 l0 ln l1 ln 1 l2 ln 2 你不能只是單純的改變節點內部的值,而是需要實際的進行節點交換。示例 1 給定鍊錶 1 2 3 4,重新排列為 1 4 2 3.示例 2 給定鍊錶 1 2 3 4 5,重新排列為 1 5 2...