92. Reverse Linked List II (题目链接)
Medium
Reverse a linked list from position m to n. Do it in one-pass.
Note: 1 ≤ m ≤ n ≤ length of list.
Example:
Input: 1->2->3->4->5->NULL, m = 2, n = 4 Output: 1->4->3->2->5->NULL
思路:
关键变量:
pre_node = ListNode() 表示需要翻转的链表的其实节点的前一个节点,也就是都(m-1)个节点
front_node = None 表示第m的节点
post_node = None 表示第n+1个节点
# Definition for singly-linked list.
# class ListNode:
# def __init__(self, val=0, next=None):
# self.val = val
# self.next = next
class Solution:
def reverseBetween(self, head: ListNode, m: int, n: int) -> ListNode:
if m == n:
return head
cur, cur_next = head, head.next
pre_node, front, post_node = ListNode(), None, None
cnt = 1
flag = False
while cnt < n:
if cnt == m:
front = cur
cur_next = cur.next
while True:
if cnt + 1 == n:
post_node = cur_next.next
cur_next.next = cur
flag = True
break
else:
cur_next_next = cur_next.next
cur_next.next = cur
cur = cur_next
cur_next = cur_next_next
cnt += 1
if flag:
break
else:
cnt += 1
pre_node = cur
cur = cur.next
pre_node.next = cur_next
front.next = post_node
if m == 1:
return cur_next
else:
return head