1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55
| public class Q25 { public ListNode reverseKGroup(ListNode head, int k) { ListNode res = new ListNode(), index = head; res.next = head; int count = 0; ListNode beforeL = res, l = beforeL.next, r, afterR; while (index != null) { if (++count == k) { r = index; afterR = index.next; reverse(l, count); index = l; l.next = afterR; beforeL.next = r; beforeL = index; l = index.next; count = 0; } index = index.next; } return res.next; }
private void reverse(ListNode start, int n) { ListNode prev = null; for (int i = 0; i < n; i++) { ListNode next = start.next; start.next = prev; prev = start; start = next; } }
public static void main(String[] args) { ListNode node = new ListNode(1); node.next = new ListNode(2); node.next.next = new ListNode(3); node.next.next.next = new ListNode(4); node.next.next.next.next = new ListNode(5); new Q25().reverseKGroup(node, 3); } }
|