我的解法:
class
solution
:def
reversebetween
(self, head: listnode, m:
int, n:
int)
-> listnode:
count =
0 dummy = listnode(
) dummy.
next
= head
p = dummy
inv_nodes =
while count <= n:
if count == m-1:
first_pre = p
if m <= count <= n:
p = p.
next
count +=
1for i in
range
(len
(inv_nodes)-1
,0,-
1): inv_nodes[i]
.next
= inv_nodes[i-1]
first_pre.
next
= inv_nodes[-1
] inv_nodes[0]
.next
= p return dummy.
next
定義乙個偽頭節點,從偽頭節點開始遍歷一遍鍊錶,遍歷過程中計數,遍歷到第m-1個節點時,用指標first_pre記錄指向節點,將第m到第n個節點儲存到列表中。遍歷到第n+1個節點時,停止遍歷,此時p指向第n+1個節點。將列表中的節點從後往前反向鏈結,在將first_pre指向列表最後乙個節點,即將原鍊錶頭部接上翻轉後的鍊錶,而列表第乙個節點指向指標p即接上剩餘原鍊錶。時間複雜度最壞情況為o(n),空間複雜度o(n)。
大佬解法:
class
solution
:def
reversebetween
(self, head: listnode, m:
int, n:
int)
-> listnode:
count =
1 dummy = listnode(
) dummy.
next
= head
pre, cur = dummy, head
while count <= n:
if count == m:
fp = pre
if m+
1<=count<=n:
third = cur.
next
cur.
next
= pre
pre = cur
cur = third
else
: cur = cur.
next
pre = pre.
next
count +=
1 fp.
next
.next
= cur
fp.next
= pre
return dummy.
next
利用三個指標可以實現一次遍歷修改鍊錶方向o(n),空間複雜度o(1)。 XDOJ1184 貪心的小白羊
description 喜羊羊 美羊羊 懶羊羊 沸羊羊 慢羊羊 軟綿綿 紅太狼 灰太狼 別看我只是乙隻羊 綠草因為我變得更香 天空因為我變得更藍 白雲因為我變得柔軟 eva家裡想養很多小白羊,每個小白羊都要每天至少吃一定量的食物為base i 小白羊總是很貪心,如果她看到eva家裡養有m隻羊,那麼她...
演算法小白 LeetCode刷題篇(一)
題目指路 題目描述 編寫乙個函式,以字串作為輸入,反轉該字串中的母音字母。示例 1 輸入 hello 輸出 holle 示例 2 輸入 leetcode 輸出 leotcede 思路一 比較菜的雙指標 兩邊的指標逐漸向中間逼近,直到兩指標重合跳出迴圈。兩指標移動的時候分為以下幾種情況 1.當左指標沒...
leetcode 小白刷題之路 Day1
no.1 經典的動態規劃入門題目 跳台階問題,連續提交三四次沒有通過,記錄一下教訓。跳台階 提交問題 class solution def climbstairs self,n int int dp i for i in range n 1 i 2 while i 2 and i n dp i dp...