File tree Expand file tree Collapse file tree 1 file changed +68
-0
lines changed Expand file tree Collapse file tree 1 file changed +68
-0
lines changed Original file line number Diff line number Diff line change
1
+
2
+ class Solution {
3
+
4
+ ListNode preGroupTail = null ;
5
+ ListNode result = null ;
6
+
7
+ public ListNode reverseKGroup (ListNode head , int k ) {
8
+
9
+ if (head == null || head .next == null || k == 1 ) {
10
+ return head ;
11
+ }
12
+
13
+ int index = 1 ;
14
+ ListNode groupHead = head ;
15
+ ListNode groupTail = head ;
16
+
17
+ while (true ) {
18
+
19
+ if (index != k ) {
20
+ groupTail = groupTail .next ;
21
+ if (groupTail != null ) {
22
+ index ++;
23
+ continue ;
24
+ }else {
25
+ // 链表长度小于 K 的情况
26
+ if (this .preGroupTail != null ) {
27
+ this .preGroupTail .next = groupHead ;
28
+ break ;
29
+ }else {
30
+ return head ;
31
+ }
32
+ }
33
+ }else {
34
+ ListNode node = this .swap (groupHead , groupTail );
35
+ if (node == null ) {
36
+ break ;
37
+ }
38
+ groupHead = node ;
39
+ groupTail = node ;
40
+ index = 1 ;
41
+ }
42
+ }
43
+ return result ;
44
+ }
45
+
46
+ private ListNode swap (ListNode head , ListNode tail ) {
47
+
48
+ ListNode preNode = null ;
49
+ ListNode currentNode = head ;
50
+ while (currentNode != tail ) {
51
+ ListNode next = currentNode .next ;
52
+ currentNode .next = preNode ;
53
+ preNode = currentNode ;
54
+ currentNode = next ;
55
+ }
56
+
57
+ ListNode node = currentNode .next ;
58
+ currentNode .next = preNode ;
59
+
60
+ if (this .preGroupTail != null ) {
61
+ this .preGroupTail .next = currentNode ;
62
+ }else {
63
+ result = currentNode ;
64
+ }
65
+ this .preGroupTail = head ;
66
+ return node ;
67
+ }
68
+ }
You can’t perform that action at this time.
0 commit comments