mirror of
https://github.com/prdlk/leetcode.git
synced 2026-11-02 13:12:44 +00:00
71 lines
1.8 KiB
Plaintext
71 lines
1.8 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"
|
|
companies:
|
|
- { name: "Bloomberg", period: "Thirty Days", frequency: 83.1 }
|
|
- { name: "Amazon", period: "Thirty Days", frequency: 39.1 }
|
|
- { name: "Microsoft", period: "Three Months", frequency: 42.1 }
|
|
- { name: "Google", period: "Three Months", frequency: 28.8 }
|
|
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
|
|
```
|