1 public class Solution {
2 public ListNode reverseKGroup(ListNode head, int k) {
3 // Start typing your Java solution below
4 // DO NOT write main() function
5
6 if(head == null || k == 1)
7 return head;
8
9 int len = 0;
10 ListNode p = head;
11 while(p != null){
12 p = p.next;
13 len ++;
14 }
15
16 ListNode safeG = new ListNode(-1);
17 safeG.next = head;
18 ListNode pre = safeG, cur = head, post = head.next;
19
20 int m = len / k;
21 for(int i = 0; i < m; i++){
22 post = cur.next;
23 //reverse(pre, cur, post, k);
24 int j = 0;
25 while(post != null){
26 ListNode tmp = post.next;
27 post.next = cur;
28 cur = post;
29 post = tmp;
30 j ++;
31 if(j == k - 1)
32 break;
33 }
34 ListNode tmp = pre.next;
35 pre.next = cur;
36 tmp.next = post;
37 pre = tmp;
38 cur = pre.next;
39
40 }
41
42 return safeG.next;
43
44 }
45
46 public void reverse(ListNode pre, ListNode cur, ListNode post, int k){
47 int i = 0;
48 while(post != null){
49 ListNode tmp = post.next;
50 post.next = cur;
51 cur = post;
52 post = tmp;
53 i ++;
54 if(i == k - 1)
55 break;
56 }
57 }
58 }