2 4 劍指offer 反轉鍊錶

2021-09-10 14:20:11 字數 2814 閱讀 7311

輸入乙個鍊錶,反轉鍊錶後,輸出新鍊錶的表頭。

迭代法:

畫圖模擬,發現需要三個指標來完成反轉,需要儲存下乙個節點,因為反轉後會丟失和後面節點的連線。注意頭節點的next要變成none(尾節點),返回節點是原來的尾節點。

遞迴法:

新建乙個頭節點指向尾節點的,每次遞迴返回值不變。每次遞迴傳入的節點phead是此次要加入反轉鍊錶的節點,phead.next指向的是已經反轉過的鍊錶的最後乙個節點,所以把phead賦值給phead.next.next,成功反轉該節點。不要忘記把phead.next設為none,結束鍊錶,尾節點。

# 頭節點變尾節點

while pafter !=

none

: p.

next

= pahead

pahead = p

p = pafter

pafter = pafter.

next

p.next

= pahead

return p

defreverselist

(self, head: listnode)

-> listnode:

pre =

none

cur = head

while cur !=

none

: ne = cur.

next

cur.

next

= pre

pre = cur

cur = ne

return pre

defreverselist

(phead)

:if phead ==

none

or phead.

next

==none

:return phead

else

: newhead = listnode(0)

newhead = reverselist(phead.

next

) phead.

next

.next

= phead

phead.

next

=none

return newhead

對第m-n個節點反轉,其餘節點不變

虛頭節點便於m=1的情況下的反轉

找到要反轉的前乙個節點pre

找到第乙個要反轉的節點cur

找到當前要反轉的節點ne

反轉後的最後乙個節點,與未反轉的節點連線

當前反轉節點作為反轉後的頭節點,next指向之前的頭節點

更新反轉後的頭節點

(這裡的頭節點指待反轉鍊錶的頭節點,不是整個鍊錶的頭節點)

def

reversebetween

(self, head: listnode, m:

int, n:

int)

-> listnode:

if head ==

none

:return

none

dummyhead = listnode(0)

dummyhead.

next

= head

pre = dummyhead

for _ in

range

(m-1):

pre = pre.

next

# pre指向反轉的前乙個節點,用來連接待反轉的最後乙個節點

cur = pre.

next

# cur指向第乙個要反轉的節點,是反轉後的最後乙個節點

for _ in

range

(n-m)

: ne = cur.

next

#保留下乙個節點資訊,ne是此次要和cur反轉的節點

cur.

next

= ne.

next

#反轉後的最後乙個節點,與未反轉的節點連線

ne.next

= pre.

next

#注意這裡不能直接等於cur,因為cur不變,一直指向第乙個要反轉的節點,所以要通過pre.next去找反轉後的頭節點

pre.

next

= ne #更新反轉後的頭節點

劍指Offer 24 反轉鍊錶

定義乙個函式,輸入乙個鍊錶的頭節點,反轉該鍊錶並輸出反轉後鍊錶的頭節點。例 輸入 1 2 3 4 5 none 輸出 5 4 3 2 1 none 雙指標遍歷鍊錶,將當前節點的next設為前乙個節點。注意儲存當前節點的next來遍歷。時間複雜度 o n 空間複雜度 o 1 def reverse l...

劍指offer24 反轉鍊錶

定義乙個函式,輸入乙個鍊錶的頭結點,反轉該鍊錶並輸出反轉後鍊錶的頭結點。樣例 輸入 1 2 3 4 5 null 輸出 5 4 3 2 1 null思路 初始化乙個新的頭節點new head,然後用尾插法把原始鍊錶中的結點插入新的頭節點。最後return new head next.acwing 3...

劍指offer24 反轉鍊錶

定義乙個函式,輸入乙個鍊錶的頭結點,反轉該鍊錶並輸出轉換後的頭結點。首先,從題目中可得知為單鏈表結構,只有指向下乙個元素的指標。而要完成整個鍊錶的反轉則需要將所有next指標進行反轉。定義3個指標,分別指向當前遍歷的節點 它的前乙個節點以及後乙個節點。pnode ppre pre pnode phe...