mirror of
https://github.com/prdlk/leetcode.git
synced 2026-11-02 21:22:43 +00:00
66 lines
1.5 KiB
Plaintext
66 lines
1.5 KiB
Plaintext
---
|
|
title: '92. Reverse Linked List II'
|
|
description: Given the head of a singly linked list and two integers left and right where left <= right, reverse the nodes of the list from position left to position right, and return the reversed list
|
|
icon: dot
|
|
topics:
|
|
- { name: "Linked List", slug: "linked-list" }
|
|
issue: "https://github.com/prdlk/leetcode/issues/83"
|
|
sidebar:
|
|
label: 'Reverse Linked List II'
|
|
badge: 'Medium'
|
|
---
|
|
|
|
::::warning
|
|
Could you do it in one pass?
|
|
::::
|
|
|
|
### Example 1:
|
|
- Input: `head = [1,2,3,4,5], left = 2, right = 4`
|
|
- Output: `[1,4,3,2,5]`
|
|
|
|
### Example 2:
|
|
- Input: `head = [5], left = 1, right = 1`
|
|
- Output: `[5]`
|
|
|
|
### Constraints:
|
|
|
|
- The number of nodes in the list is n.
|
|
- `1 <= n <= 500`
|
|
- `-500 <= Node.val <= 500`
|
|
- `1 <= left <= right <= n`
|
|
|
|
## Solution
|
|
|
|
```py
|
|
# 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 | None, left: int, right: int
|
|
) -> ListNode | None:
|
|
cur, prev = head, None
|
|
while left > 1:
|
|
prev = cur
|
|
cur = cur.next
|
|
left, right = left - 1, right - 1
|
|
|
|
tail, con = cur, prev
|
|
while right:
|
|
third = cur.next
|
|
cur.next = prev
|
|
prev = cur
|
|
cur = third
|
|
right -= 1
|
|
|
|
if con:
|
|
con.next = prev
|
|
else:
|
|
head = prev
|
|
|
|
tail.next = cur
|
|
return head
|
|
```
|