提交代码:
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/
class Solution {
public ListNode reverseKGroup(ListNode head, int k) {
if (head == null || k == 1)
return head;
ListNode newhead = new ListNode(-1);
newhead.next = null;
int i, cnt = 0;
ListNode pmark = head;
ListNode grouphead = newhead;
ListNode p = head;
ListNode pnext = p.next;
ListNode nextgrouphead = p;
while (pmark != null) {
for (i = 0; i < k && pmark != null; i++) {
// pmark会移动到下一个翻转小组的第一个位置
pmark = pmark.next;
cnt++;
}
// 退出循环之后如果cnt==k则翻转小组中的结点个数有k个需要反转
if (cnt == k) {
for (i = 0; i < k; i++) {
//头插法
p.next = grouphead.next;
grouphead.next = p;
p = pnext;
if (p != null)
pnext = p.next;
}
grouphead = nextgrouphead;
nextgrouphead = p;
cnt = 0;
} else {
grouphead.next = p;
return newhead.next;
}
}
return newhead.next;
}
}
运行结果: