給定乙個鍊錶,形式如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...