Skip to content

Instantly share code, notes, and snippets.

@mauricioaniche
Last active July 14, 2019 19:30
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save mauricioaniche/67df0848f44fd522c70d762b5f79e496 to your computer and use it in GitHub Desktop.
Save mauricioaniche/67df0848f44fd522c70d762b5f79e496 to your computer and use it in GitHub Desktop.
package albie;
class ListNode<T> {
ListNode(T x) {
value = x;
}
T value;
ListNode<T> next;
}
public class Albie {
static ListNode<Integer> reverseNodesInKGroups(ListNode<Integer> l, int k) {
int sizeOfTheList = sizeOf(l);
int numberOfInteractions = sizeOfTheList / k;
return reverseNodesInKGroups(l, k, numberOfInteractions);
}
private static ListNode<Integer> reverseNodesInKGroups(ListNode<Integer> l, int k, int numberOfInteractions) {
if(numberOfInteractions == 0)
return l;
ListNode<Integer> first = l;
ListNode<Integer> previous = l;
ListNode<Integer> current = l;
ListNode<Integer> lostLink = current.next;
for (int i = 0; i < k-1; i++) {
current = lostLink;
lostLink = current.next;
current.next = previous;
previous = current;
}
first.next = reverseNodesInKGroups(lostLink, k, numberOfInteractions-1);
return current;
}
private static void print(ListNode<Integer> l) {
while(l!=null) {
System.out.print(l.value + " ");
l = l.next;
}
System.out.println();
}
private static int sizeOf(ListNode<Integer> l) {
int size = 0;
while(l!=null) {
size++;
l = l.next;
}
return size;
}
public static void main(String[] args) {
ListNode<Integer> v1;
ListNode<Integer> v2;
ListNode<Integer> v3;
ListNode<Integer> v4;
ListNode<Integer> v5;
ListNode<Integer> v6;
ListNode<Integer> v7;
ListNode<Integer> v8;
v1 = new ListNode<>(1);
v2 = new ListNode<>(2);
v3 = new ListNode<>(3);
v4 = new ListNode<>(4);
v5 = new ListNode<>(5);
v6 = new ListNode<>(6);
v1.next = v2;
v2.next = v3;
v3.next = v4;
v4.next = v5;
v5.next = v6;
ListNode<Integer> result = reverseNodesInKGroups(v1, 3);
print(result);
v1 = new ListNode<>(1);
v2 = new ListNode<>(2);
v3 = new ListNode<>(3);
v4 = new ListNode<>(4);
v5 = new ListNode<>(5);
v6 = new ListNode<>(6);
v7 = new ListNode<>(7);
v8 = new ListNode<>(8);
v1.next = v2;
v2.next = v3;
v3.next = v4;
v4.next = v5;
v5.next = v6;
v6.next = v7;
v7.next = v8;
ListNode<Integer> result2 = reverseNodesInKGroups(v1, 3);
print(result2);
v1 = new ListNode<>(1);
v2 = new ListNode<>(2);
v3 = new ListNode<>(3);
v4 = new ListNode<>(4);
v5 = new ListNode<>(5);
v6 = new ListNode<>(6);
v7 = new ListNode<>(7);
v8 = new ListNode<>(8);
v1.next = v2;
v2.next = v3;
v3.next = v4;
v4.next = v5;
v5.next = v6;
v6.next = v7;
v7.next = v8;
ListNode<Integer> result3 = reverseNodesInKGroups(v1, 1);
print(result3);
v1 = new ListNode<>(1);
v2 = new ListNode<>(2);
v3 = new ListNode<>(3);
v4 = new ListNode<>(4);
v5 = new ListNode<>(5);
v6 = new ListNode<>(6);
v7 = new ListNode<>(7);
v8 = new ListNode<>(8);
v1.next = v2;
v2.next = v3;
v3.next = v4;
v4.next = v5;
v5.next = v6;
v6.next = v7;
v7.next = v8;
ListNode<Integer> result4 = reverseNodesInKGroups(v1, 5);
print(result4);
v1 = new ListNode<>(1);
v2 = new ListNode<>(2);
v3 = new ListNode<>(3);
v4 = new ListNode<>(4);
v5 = new ListNode<>(5);
v6 = new ListNode<>(6);
v7 = new ListNode<>(7);
v8 = new ListNode<>(8);
v1.next = v2;
v2.next = v3;
v3.next = v4;
v4.next = v5;
v5.next = v6;
v6.next = v7;
v7.next = v8;
ListNode<Integer> result5 = reverseNodesInKGroups(v1, 8);
print(result5);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment