题目
题目同上一篇方法一中的题目。
思路
方法二:在原链表中调整
用变量记录每一组开始的第一个节点,最后一个节点,然后逆序即可。
源码
public class Node{
public int value;
public Node next;
public Node(int data){
this.value=data;
}
}
public Node reverseKNodes2(Node head,int K){
if(K<2){
return head;
}
Node cur=head;
Node pre=null;
Node next=null;
Node start=null;//逆序的起点
int count=1;
while(cur!=null){
next=cur.next;
if(count==K){
start=pre==null?head:pre.next;
head=pre==null?cur:head;
resign2(pre,start,cur,next);
pre=start;
count=0;
}
count++;
cur=next;
}
return head;
}
//逆序操作
public void resign2(Node left,Node start, Node end,Node right){
Node pre=start;
Node cur=start.next;
Node next=null;
while(cur!=right){
next=cur.next;
cur.next=pre;
pre=cur;
cur=next;
}
if(left!=null){
left.next=end;
}
start.next=right;
}