LeetCodeDiary

A Diary for solving LeetCode problems

View on GitHub
'''
Description: 
Autor: Au3C2
Date: 2021-03-18 13:01:04
LastEditors: Au3C2
LastEditTime: 2021-03-18 13:01:17
'''
# 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, left: int, right: int) -> ListNode:
        if left == right or not head.next:
            return head
            
        node = TreeNode(0)
        node.next = head
        head = node

        i = 0
        ori_head = head
        while i < left - 1: # 寻找 left - 1 节点
            head = head.next
            i += 1
        last_node = head.next      # 指向 left 节点
        this_node = last_node.next # 指向 left + 1 节点

        while i < right-1:
            last_node.next = this_node.next
            this_node.next = head.next
            head.next = this_node
            this_node = last_node.next
            i += 1
        return ori_head.next 
        
# 链表,中等,每日一题
# https://leetcode-cn.com/problems/reverse-linked-list-ii/