反轉從位置 m 到 n 的鍊錶。請使用一趟掃瞄完成反轉。
說明:1 ≤ m ≤ n ≤ 鍊錶長度。
示例:輸入: 1->2->3->4->5->null, m = 2, n = 4
輸出: 1->4->3->2->5->null
核心部分還是用普通鍊錶反轉的三指標法
注意幾個坑點:
首先思路是直接遍歷到第m個節點之前的m-1個節點,並記錄該節點為pre,用於反轉後接通反轉後區間的新頭結點。
當被反轉的部分包括原煉表頭指標時,注意要將pre設為none,作為標誌,反轉結束後直接將反轉區間的頭結點設為結果鍊錶的新頭結點
設定乙個被反轉鍊錶部分的第乙個節點為last,表示該位置為反轉之後的尾指標,該位置用於接入原鍊錶的下乙個結點
# definition for singly-linked list.
# class listnode:
# def __init__(self, x):
# self.val = x
# self.next = none
class
solution
:def
reversebetween
(self, head: listnode, m:
int, n:
int)
-> listnode:
if head==
none
or head.
next
==none
or m==n:
return head
cnt=
1 tmp=head
pre=
none
while cnt#首先遍歷到被反轉部分的前乙個指標
tmp=tmp.
next
cnt+=
1if m!=1:
pre=tmp
tmp=tmp.
next
cnt+=
1 l=
none
last=tmp
while cnt<=n:
#普通的三支針法反轉鍊錶
r=tmp.
next
tmp.
next
=l l=tmp
tmp=r
cnt+=
1 last.
next
=r if pre==
none
:#若反轉部分包括head,設定pre為空,設定翻轉後的鍊錶作為整個鍊錶的新head
head=l
else
:#否則將之前記錄的pre接入反轉後的新頭結點
pre.
next
=l return head
LeetCode反轉鍊錶II
反轉從位置 m 到 n 的鍊錶。請使用一趟掃瞄完成反轉。說明 1 m n 鍊錶長度。示例 輸入 1 2 3 4 5 null,m 2,n 4 輸出 1 4 3 2 5 null 把鍊錶分為三部分,中間一部分當做反轉鍊錶i的方法 class solution listnode node pre lis...
LeetCode 反轉鍊錶 II
先移動節點到要反轉的地方,反轉鍊錶就比較簡單了,然後把當前節點和反轉的鍊錶以及後面的第乙個節點的串起來即可 definition for singly linked list.public class listnode class solution 反轉開始結點 listnode newhead n...
LeetCode 92 反轉鍊錶 II
反轉從位置 m 到 n 的鍊錶。請使用一趟掃瞄完成反轉。說明 1 m n 鍊錶長度。示例 輸入 1 2 3 4 5 null,m 2,n 4 輸出 1 4 3 2 5 null 5ms definition for singly linked list.public class listnode c...