初步代码,有时间优化下= =
/**
* 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||head.next==null){
return head;
}
ListNode tmp=head;
ListNode result=null ;
int i=0,j=1;
ListNode cur = head;
ListNode prev = null;
ListNode tmp1 = null;
ListNode tmp2 = head; //储存一组中最后一个
ListNode nextF=head;
while (tmp2.next!=null){
nextF=tmp;
while (i<k){
if(nextF!=null&&nextF.next!=null&&nextF.next.next!=null){
if(i+1<k){
nextF=nextF.next.next;
}else {
nextF=nextF.next;
}
}else{
if(i+1==k&&nextF!=null&&nextF.next!=null){
nextF=nextF.next;
}else{
nextF=null;
}
}
tmp=tmp.next;
i++;
if(tmp==null){
break;
}
}
if(i<k){ //3
break;
}
i=0;
tmp2=cur;
while (cur != tmp&&cur != null) {
tmp1 = cur.next; //2
cur.next = prev; //1.next=null 2.next=1
prev = cur; // prev=1 2
cur = tmp1; //cur = 2 3
}
if(j==1){
result=prev;
}
if(nextF!=null){
tmp2.next=nextF;
}else {
tmp2.next=tmp;
}
j++;
}
if(result==null){
return head;
}
return result;
}
}