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
| class Solution { public ListNode reverseKGroup(ListNode head, int k) { if (head == null || k == 1) return head;
ListNode dummy = new ListNode(0); dummy.next = head;
ListNode pre = dummy, end = dummy;
while (true) { for (int i = 0; i < k && end != null; i++) { end = end.next; } if (end == null) break;
ListNode start = pre.next; ListNode next = end.next; end.next = null;
pre.next = reverse(start);
start.next = next; pre = start; end = pre; }
return dummy.next; }
private ListNode reverse(ListNode head) { ListNode prev = null; while (head != null) { ListNode nextTemp = head.next; head.next = prev; prev = head; head = nextTemp; } return prev; } }
|