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