1. 題目描述
反轉(zhuǎn)從位置 m 到 n 的鏈表。請(qǐng)使用一趟掃描完成反轉(zhuǎn)。
說明:
1 ≤ m ≤ n ≤ 鏈表長度。
示例:
輸入: 1->2->3->4->5->NULL, m = 2, n = 4
輸出: 1->4->3->2->5->NULL
2. 思路
題目要求一趟遍歷。處理鏈表的題,一般會(huì)生成一個(gè)dummy Node,使得dummy Node指向鏈表的頭結(jié)點(diǎn)。另外需要先定位到要反轉(zhuǎn)鏈表的開始節(jié)點(diǎn),并標(biāo)記開始節(jié)點(diǎn)的前一節(jié)點(diǎn),使得在翻轉(zhuǎn)的過程中,始終能找到這一節(jié)點(diǎn)。
假設(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
)
# 先生成一個(gè)dummy節(jié)點(diǎn)
dummyNode
.
next
=
head
pre
=
dummyNode
for
i
in
range
(
m
-
1
)
:
pre
=
pre
.
next
# 定位到開始翻轉(zhuǎn)鏈表的之前一個(gè)節(jié)點(diǎn)
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號(hào)聯(lián)系: 360901061
您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長非常感激您!手機(jī)微信長按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對(duì)您有幫助就好】元
