leetcode 鍊錶反轉II

2021-09-26 06:53:39 字數 1452 閱讀 6849

反轉從位置 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...