LeetCode演算法題143 重排鍊錶解析

2021-09-11 18:11:18 字數 1623 閱讀 6519

給定乙個單鏈表 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->4->3.
這個題可以先用快慢指標找到中點儲存,然後截斷,將後半段存入棧中,然後遍歷前半段,把棧中的元素插進鍊錶,棧起到了翻轉鍊錶的作用。

c++源**:

/**

* definition for singly-linked list.

* struct listnode

* };

*/class

solution

fast = slow-

>next;

slow-

>next =

null

; slow = head;

while

(fast)

while

(!s.

empty()

)}};

python3源**:

# definition for singly-linked list.

# class listnode:

# def __init__(self, x):

# self.val = x

# self.next = none

class

solution

:def

reorderlist

(self, head: listnode)

->

none

:"""

do not return anything, modify head in-place instead.

"""if head==

none

:return

slow = head

fast = head

while fast and fast.

next

: slow = slow.

next

fast = fast.

next

.next

fast = slow.

next

slow.

next

=none

slow = head

s =while fast:

fast = fast.

next

while

len(s)!=0

: tmp = slow.

next

slow.

next

= s.pop(

) slow.

next

.next

= tmp

slow = tmp

Leetcode 每日一題 143 重排鍊錶

給定乙個單鏈表 l l0 l1 ln 1 ln 將其重新排列後變為 l0 ln l1 ln 1 l2 ln 2 你不能只是單純的改變節點內部的值,而是需要實際的進行節點交換。這個問題的物件如果是支援下標索引的陣列那就簡單很多了,根據陣列下標進行重組就可以,但是鍊錶本身是不支援下標索引的,所以很自然地...

leetcode每日一題143 重排鍊錶

給定乙個單鏈表 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...

LeetCode題解 143 重排鍊錶

將鍊錶l0 l1 ln 1 ln 排列成l0 ln l1 ln 1 l2 ln 2 觀察第二個鍊錶是交替排列的。依次從原煉表頭取乙個,從原煉表尾取乙個。單鏈表的最大問題就是不能夠逆向獲取節點,因此我的思路是將每乙個節點的指標儲存到vector中,這樣能夠做到隨機訪問。給定鍊錶 1 2 3 4,重新排...