Given a linked list, reverse the nodes of a linked list k at a time and return its modified list.
k is a positive integer and is less than or equal to the length of the linked list. If the number of nodes is not a multiple of k then left-out nodes in the end should remain as it is.
Given this linked list: 1->2->3->4->5
For k = 2, you should return: 2->1->4->3->5
For k = 3, you should return: 3->2->1->4->5
- Only constant extra memory is allowed.
- You may not alter the values in the list's nodes, only nodes itself may be changed.
- Java
-
mine
Runtime: 0 ms, faster than 100.00%, Memory Usage: 39.7 MB, less than 8.62% of Java online submissions
//O(N)time O(1)space public ListNode reverseKGroup(ListNode head, int k) { ListNode t = head; int size = 0; //get the node count while (t != null) { t = t.next; size++; } if (size < k || k == 1) { return head; } ListNode res = new ListNode(0); t = res; //need reverse count int reverseCount = size / k; int index = 0; ListNode reverse = null; ListNode temp; while (index < reverseCount) { size = 0; while (size < k) { temp = head.next; head.next = reverse; reverse = head; head = temp; size++; } t.next = reverse; while (t.next != null) { t = t.next; } reverse = null; index++; } t.next = head; return res.next; }
-
the most votes
Runtime: 0 ms, faster than 100.00%, Memory Usage: 39.7 MB, less than 6.90% of Java online submissions
//O(N)time O(1)space public ListNode reverseKGroup(ListNode head, int k) { ListNode curr = head; int count = 0; while (curr != null && count != k) { // find the k+1 node curr = curr.next; count++; } if (count == k) { // if k+1 node is found curr = reverseKGroup(curr, k); // reverse list with k+1 node as head // head - head-pointer to direct part, // curr - head-pointer to reversed part; while (count-- > 0) { // reverse current k-group: ListNode tmp = head.next; // tmp - next head in direct part head.next = curr; // preappending "direct" head to the reversed list curr = head; // move head of reversed part to a new node head = tmp; // move "direct" head to the next node in direct part } head = curr; } return head; }
-