鍊錶 重新排序

2021-08-16 10:32:23 字數 795 閱讀 3066

給定乙個鍊錶,形式如l0->l1->l2->l3-> ... ->ln-1->ln,要求重新排序成如下形式:l0->ln->l1->ln-1->...

如給定鍊錶為1->2->3->4->5->6,則重新排序後的結果為1->6->2->5->3->4。

這裡需注意的是,要求的並不是返回乙個新鍊錶,而是直接把原鍊錶重新排序,不需返回任何值。

思路:此題過程稍微有點複雜,可以分為以下三步:

1、尋找鍊錶的中點,把鍊錶分為兩部分。如上面鍊錶從3->4這個地方分開。

2、把中點後面的部分倒序。如上面鍊錶後半部分倒序為6->5->4。

3、把前半部分跟後半部分重新組合。如上面鍊錶按照兩個部分一邊乙個元素的順序組合結果為1->6->2->5->3->4,就得到了最終結果。

public void reorderlist(listnode head) 

start = slow.next;

slow = start.next;    //這裡slow這個指標重複使用了

curr = slow;     //用來將後半部分倒序

while(slow != null)

slow = head;    //slow和fast指標再次重複使用於兩部分的合併

fast = head.next;

while(start != null)

slow.next = null;    本來是指向自身的

}

為了節省空間,這裡的指標重複使用了,不是很直觀。為了直觀點,可以三部分分別設定相應的指標,並不會多耗費多少空間。

python鍊錶 鍊錶重新排序

輸入 1 2 3 4 5 6 7 輸出 1 7 2 6 3 5 4 或者輸入 1 2 3 4 5 6 輸出 1 6 2 5 3 4 思路 1.將1 2 3 4 5 6 7分成 1 2 3 與 4 5 6 7,將後半部分逆序7 6 5 4 2.合併1 2 3與7 6 5 4 為1 7 2 6 3 5 ...

重新排列鍊錶

leetcode leetcode上有下面這樣乙個題目,比較有意思,拿來實現,權當練習基本功了 total accepted 8598 total submissions 44508 my submissions given a singly linked list l l 0 l1 l n 1 l...

鍊錶 排序鍊錶

樂扣原題 definition for singly linked list.public class listnode class solution 將鍊錶轉化為陣列 listlist new arraylist while null head 陣列遞增排序 collections.sort li...