題目
題目同上一篇方法一中的題目。
思路
方法二:在原鏈表中調整
用變量記錄每一組開始的第一個節點,最後一個節點,然後逆序即可。
源碼
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;
}