Reorder List 穿插反轉鍊錶

2021-08-20 01:12:57 字數 1277 閱讀 2782

given a singly linked list l: 

l0→l

1→…→

ln-1→l

n,reorder it to: l

0→ln

→l1→l

n-1→l

2→ln-2→…

you may not modify the values in the list's nodes, only nodes itself may be changed.

example 1:

given 1->2->3->4, reorder it to 1->4->2->3.
example 2:

given 1->2->3->4->5, reorder it to 1->5->2->4->3.
思路:此題需要儲存鍊錶的倒序,然後每次連線兩個節點。既然考慮倒序,那麼可以使用棧老儲存節點。由於新煉表是正序與倒序交替,所以每次要新增兩個節點,因此,當正序的節點遇到倒序的節點時,證明整個鍊錶已經穿插完成。

}當然,更好的方法是不使用棧,直接將後半鍊錶反轉,再交替穿插。不需要額外空間。

class solution 

listnode mid = findmid(head);;

listnode midnext = mid.next;

mid.next = null;

listnode reversedhead2 = reverse(midnext);

crossingmerge(head, reversedhead2);

}private listnode findmid(listnode head)

return slow;

}private listnode reverse(listnode head)

listnode prev = null;

listnode cur = head;

while (cur != null)

return prev;

}private void crossingmerge(listnode head1, listnode head2)

}

鍊錶 reorder list

我之前是想著,用棧來儲存倒置的鍊錶,然後再以結點數作為while條件來依次地插入。可是超時了。因為別人題解裡也有這種做法,但是有通過,看了一下,可能原因出在 別人找了鍊錶的中點,只是用棧儲存了鍊錶的後半部分 而我是棧儲存全部部分。看了題解受到啟發,用了另一種方法 化解為熟悉的三個小題 感覺這種思想不...

Reorder List 鍊錶重排序

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...

考試的這個星期穿插的筆試

最近這個星期都在準備考試,學校的生活真舒服 老虎集團我覺得還是可以的,之前的資料分析筆試掛了,後面又給我發了python研發的筆試邀請 10題選擇題,2題程式設計題 程式設計題 單調棧給定乙個不含重複數字的序列,求每個數的左右比他小的第乙個數的下標。不存在則為 1 我寫的 時間會超時 for i i...