Skip to main content

Command Palette

Search for a command to run...

Solving Leetcode Interviews in Seconds with AI: Reverse Linked List II

Updated
2 min read

Introduction

In this blog post, we will explore how to solve the LeetCode problem "92" using AI. LeetCode is a popular platform for preparing for coding interviews, and with the help of AI tools like Chatmagic, we can generate solutions quickly and efficiently - helping you pass the interviews and get the job offer without having to study for months.

Problem Statement

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. 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 Follow up: Could you do it in one pass?

Explanation

Here's the approach to reverse a linked list within a given range, followed by the Python code:

  • Locate the Sublist: Traverse the list to find the nodes just before the start of the sublist to be reversed (the 'pre' node) and the starting node itself ('current' node).
  • Reverse the Sublist: Iteratively reverse the links within the sublist from 'left' to 'right'.
  • Re-link: Connect the reversed sublist back into the original list by updating the next pointers of the 'pre' node and the last node of the reversed sublist.

  • Time Complexity: O(n), where n is the number of nodes in the linked list (one-pass).

  • Space Complexity: O(1) (constant extra space).

Code

    class ListNode:
    def __init__(self, val=0, next=None):
        self.val = val
        self.next = next

def reverseBetween(head: ListNode, left: int, right: int) -> ListNode:
    """Reverses the nodes of a linked list from position left to position right."""

    if not head or left == right:
        return head

    dummy = ListNode(0)  # Create a dummy node to handle the case where left == 1
    dummy.next = head
    pre = dummy

    # Traverse to the node just before the sublist to be reversed
    for _ in range(left - 1):
        pre = pre.next

    # Start the reversal process
    current = pre.next
    for _ in range(right - left):
        next_node = current.next
        current.next = next_node.next
        next_node.next = pre.next
        pre.next = next_node

    return dummy.next

More from this blog

C

Chatmagic blog

2894 posts

Solving Leetcode Interviews in Seconds with AI: Reverse Linked List II