From 152aa04f41ff21c6b971ec5260cba44b528853be Mon Sep 17 00:00:00 2001 From: Shrujan Kotturi Date: Wed, 28 Sep 2022 23:27:15 -0400 Subject: [PATCH] Create 25-Reverse-Nodes-in-k-Group.cs --- csharp/25-Reverse-Nodes-in-k-Group.cs | 58 +++++++++++++++++++++++++++ 1 file changed, 58 insertions(+) create mode 100644 csharp/25-Reverse-Nodes-in-k-Group.cs diff --git a/csharp/25-Reverse-Nodes-in-k-Group.cs b/csharp/25-Reverse-Nodes-in-k-Group.cs new file mode 100644 index 000000000..b964f96a4 --- /dev/null +++ b/csharp/25-Reverse-Nodes-in-k-Group.cs @@ -0,0 +1,58 @@ +/** + * Definition for singly-linked list. + * public class ListNode { + * public int val; + * public ListNode next; + * public ListNode(int val=0, ListNode next=null) { + * this.val = val; + * this.next = next; + * } + * } + */ +public class Solution +{ + public ListNode ReverseKGroup(ListNode head, int k) + { + var dummy = new ListNode(0, head); + var groupPrev = dummy; + var groupNext = dummy; + + while (true) + { + var kth = getKth(groupPrev, k); + if (kth == null) + break; + + groupNext = kth.next; + + // reverse group + var prev = kth.next; + var curr = groupPrev.next; + + while (curr != groupNext) + { + var temp = curr.next; + curr.next = prev; + prev = curr; + curr = temp; + } + + var tmp = groupPrev.next; + groupPrev.next = kth; + groupPrev = tmp; + } + + return dummy.next; + } + + private ListNode getKth(ListNode curr, int k) + { + while (curr != null && k > 0) + { + curr = curr.next; + k -= 1; + } + + return curr; + } +} \ No newline at end of file