思路:先构造翻转前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) {
ListNode root;
ListNode pre;
ListNode[] roots=change(head, k);
root=roots[0];
pre=roots[1];
while(pre!=null)
{
roots=change(pre.next, k);
pre.next=roots[0];
pre=roots[1];
}
return root;
}
public static ListNode[] change(ListNode head,int k)
{
ListNode pListNode=head;
ListNode qListNode=head;
ListNode deep=head;
int n=0;
ListNode fListNode=head;
int f=0;
while(fListNode!=null)
{
f++;
fListNode=fListNode.next;
}
if(f<k)
{
ListNode[] flListNodes=new ListNode[2];
flListNodes[0]=head;
flListNodes[1]=fListNode;
return flListNodes;
}
while(pListNode!=null)
{
ListNode nex=pListNode.next;
pListNode.next=qListNode;
qListNode=pListNode;
pListNode=nex;
n++;
if(n==k)
{
deep.next=pListNode;
break;
}
}
ListNode[] qlListNodes=new ListNode[2];
qlListNodes[0]=qListNode;
qlListNodes[1]=deep;
return qlListNodes;
}
}