1. 題目描述
反轉(zhuǎn)從位置 m 到 n 的鏈表。請使用一趟掃描完成反轉(zhuǎn)。
說明:
1 ≤ m ≤ n ≤ 鏈表長度。
示例:
輸入: 1->2->3->4->5->NULL, m = 2, n = 4
輸出: 1->4->3->2->5->NULL
2. 思路
題目要求一趟遍歷。處理鏈表的題,一般會生成一個dummy Node,使得dummy Node指向鏈表的頭結(jié)點。另外需要先定位到要反轉(zhuǎn)鏈表的開始節(jié)點,并標記開始節(jié)點的前一節(jié)點,使得在翻轉(zhuǎn)的過程中,始終能找到這一節(jié)點。
假設(shè)要反轉(zhuǎn)的鏈表段如下:1—>2—>3
翻轉(zhuǎn)過程如下:
pre—>1—>2—>3
pre—>2—>1—>3
pre—>3—>2—>1
2.1 代碼:
class
Solution
:
def
reverseBetween
(
self
,
head
:
ListNode
,
m
:
int
,
n
:
int
)
-
>
ListNode
:
dummyNode
=
ListNode
(
-
1
)
# 先生成一個dummy節(jié)點
dummyNode
.
next
=
head
pre
=
dummyNode
for
i
in
range
(
m
-
1
)
:
pre
=
pre
.
next
# 定位到開始翻轉(zhuǎn)鏈表的之前一個節(jié)點
cur
=
pre
.
next
for
i
in
range
(
m
,
n
)
:
# 開始反轉(zhuǎn)
temp
=
cur
.
next
cur
.
next
=
temp
.
next
temp
.
next
=
pre
.
next
pre
.
next
=
temp
return
dummyNode
.
next
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯(lián)系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
