From 93559cf1faaaf7e492c732696ea194cc7d2aa74c Mon Sep 17 00:00:00 2001 From: Nikson2003 <164474952+Nikson2003@users.noreply.github.com> Date: Sat, 5 Oct 2024 09:50:17 +0530 Subject: [PATCH] Create Reverse Nodes in k-Group (LeetCode 25) This is a LeetCode Hard Problem (25) under the LinkedList data structure. --- .../Reverse Nodes in k-Group (LeetCode 25) | 45 +++++++++++++++++++ 1 file changed, 45 insertions(+) create mode 100644 linked_list/Reverse Nodes in k-Group (LeetCode 25) diff --git a/linked_list/Reverse Nodes in k-Group (LeetCode 25) b/linked_list/Reverse Nodes in k-Group (LeetCode 25) new file mode 100644 index 00000000..8ee151dd --- /dev/null +++ b/linked_list/Reverse Nodes in k-Group (LeetCode 25) @@ -0,0 +1,45 @@ +/** + * Definition for singly-linked list. + * public class ListNode { + * int val; + * ListNode next; + * ListNode() {} + * ListNode(int val) { this.val = val; } + * ListNode(int val, ListNode next) { this.val = val; this.next = next; } + * } + */ +class Solution { + public ListNode reverseKGroup(ListNode head, int k) { + ListNode dummy = new ListNode(0, head); // create a dummy node to return its next (head) at the end + ListNode prev = dummy; + while (true) { + ListNode tail = prev; + int count = 0; + while (tail != null && count < k) { + tail = tail.next; + count ++; + } + if(tail == null) { // break if the current node (tail) becomes null + break; + } + ListNode start = prev.next; + ListNode nextStart = tail.next; + prev.next = reverseList(start, tail); + prev = start; + } + return dummy.next; + } + + private ListNode reverseList(ListNode start, ListNode end) { + ListNode prev = end.next; + while (start != end) { + ListNode next = start.next; + start.next = prev; + prev = start; + start = next; + } + start.next = prev; + + return end; + } +}