这是一道链表的插入题,虽然题目简单,但我还是做了不长时间,方法很简单,就是以一个k为循环周期整个链表做一遍尾插法使这些节点逆序,然后再在最后的不满k个的尾部几个节点再做一遍尾插就能使尾部这几个节点恢复正常的顺序了。代码如下:
/**
* 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) {return null;}
if (k == 0 || k == 1){return head;}
ListNode first = new ListNode(-1);
first.next = null;
ListNode oriHead = first;
ListNode curr = head;
ListNode last = head;
int i = 0;
for (i = 0; curr != null; ++i) {
ListNode tmp1 = curr;
curr = curr.next;
tmp1.next = first.next;
first.next = tmp1;
if (i % k == k - 1) {
first = last;
last = curr;
}
}
if (i % k != 0) {
curr = first.next;
first.next = null;
while(curr != null) {
ListNode tmp1 = curr;
curr = curr.next;
tmp1.next = first.next;
first.next = tmp1;
}
}
return oriHead.next;
}
}