143 重排鍊錶

2021-10-06 02:23:23 字數 818 閱讀 9759

143. 重排鍊錶

給定乙個單鏈表 l:l0→l1→…→l

n-1→ln ,

將其重新排列後變為: l0→l

n→l1→l

n-1→l2→l

n-2→…

你不能只是單純的改變節點內部的值,而是需要實際的進行節點交換。

示例 1:

給定鍊錶 1->2->3->4, 重新排列為 1->4->2->3.
示例 2:

給定鍊錶 1->2->3->4->5, 重新排列為 1->5->2->4->3.
方案:

先將鍊錶存入到乙個棧裡,這樣就相當於你有了乙個順序的鍊錶和乙個倒序的鍊錶

然後找到鍊錶長的中心點,從順序鍊錶中取出乙個,從倒序的鍊錶中取出乙個

直到中心位置停止

class solution(object):

def reorderlist(self, head):

if not head:

return none

p,q = head,head

s =

while p:

p = p.next

count = (len(s) - 1)//2

while count:

temp = s.pop()

temp.next = q.next

q.next = temp

q = temp.next

count -= 1

s.pop().next = none

143 重排鍊錶

題解 時間複雜度 o n 空間複雜度 o n definition for singly linked list.struct listnode listnode int x val x next nullptr listnode int x,listnode next val x next nex...

143 重排鍊錶

題目 給定乙個單鏈表 l l0 l1 l n 1 ln 將其重新排列後變為 l0 l n l1 l n 1 l2 l n 2 你不能只是單純的改變節點內部的值,而是需要實際的進行節點交換。示例 1 給定鍊錶 1 2 3 4,重新排列為 1 4 2 3.示例 2 給定鍊錶 1 2 3 4 5,重新排列...

143 重排鍊錶

給定乙個單鏈表 l l0 l1 ln 1 ln 將其重新排列後變為 l0 ln l1 ln 1 l2 ln 2 你不能只是單純的改變節點內部的值,而是需要實際的進行節點交換。示例 1 給定鍊錶 1 2 3 4,重新排列為 1 4 2 3.暴力,使用stack逆序儲存後面要插入的數字 因為和遍歷的順序...