Last updated on August 4th, 2024 at 11:43 pm
Here, We see Reverse Linked List II LeetCode Solution. This Leetcode problem is done in many programming languages like C++, Java, JavaScript, Python, etc. with different approaches.
List of all LeetCode Solution
Topics
Linked List
Level of Question
Medium
Reverse Linked List II LeetCode Solution
Table of Contents
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]
1. Reverse Linked List II Leetcode Solution C++
class Solution { public: ListNode* reverseBetween(ListNode* head, int left, int right) { ListNode *dummy = new ListNode(0), *pre = dummy, *cur; dummy -> next = head; for (int i = 0; i < left - 1; i++) { pre = pre -> next; } cur = pre -> next; for (int i = 0; i < right - left; i++) { ListNode* temp = pre -> next; pre -> next = cur -> next; cur -> next = cur -> next -> next; pre -> next -> next = temp; } return dummy -> next; } };
2. Reverse Linked List II Leetcode Solution Java
class Solution { public ListNode reverseBetween(ListNode head, int left, int right) { if(head == null) return null; ListNode dummy = new ListNode(0); // create a dummy node to mark the head of this list dummy.next = head; ListNode pre = dummy; // make a pointer pre as a marker for the node before reversing for(int i = 0; i<left-1; i++) pre = pre.next; ListNode start = pre.next; // a pointer to the beginning of a sub-list that will be reversed ListNode then = start.next; // a pointer to a node that will be reversed for(int i=0; i<right-left; i++) { start.next = then.next; then.next = pre.next; pre.next = then; then = start.next; } return dummy.next; } }
3. Reverse Linked List II Leetcode Solution JavaScript
var reverseBetween = function(head, left, right) { let current = head, start = head, position = 1; while(position < left) { start = current current = current.next; position ++; } let reversedList = null, tail = current; while(position >= left && position <= right) { const next = current.next; current.next = reversedList; reversedList = current; current = next; position ++ } start.next = reversedList; tail.next = current; return left > 1 ? head : reversedList };
4. Reverse Linked List II Leetcode Solution Python
class Solution(object): def reverseBetween(self, head, left, right): if left == right: return head dummyNode = ListNode(0) dummyNode.next = head pre = dummyNode for i in range(left - 1): pre = pre.next reverse = None cur = pre.next for i in range(right - left + 1): next = cur.next cur.next = reverse reverse = cur cur = next pre.next.next = cur pre.next = reverse return dummyNode.next