题解 | #链表中的节点每k个一组翻转#
链表中的节点每k个一组翻转
http://www.nowcoder.com/practice/b49c3dc907814e9bbfa8437c251b028e
public ListNode reverseKGroup (ListNode head, int k) {
ListNode newhead=new ListNode(-1);//新链表头节点用来返回
ListNode newcru=newhead;//k个节点中的第一个节点,此类节点用尾插法插入。用newcru把链表分段
ListNode newcrupre=null;//[newcrupre,newcru]节点之间头插其它节点。如果i%k!=0,证明需要开启新段在newcru后面尾插节点
//更新prenewcru=newcru,newcru=newcru.next,在新的区间内头插。
int i=0;
ListNode cru=null;//尾插的时候记录old链表的下一个节点
while(head!=null){
if(i%k==0){//判断是否开启新一轮区间
ListNode node=head;
for(int j=1;j<k;j++){
node=node.next;
if(node==null){
newcru.next=head;
return newhead.next;
}
}
newcru.next=head;//头插
head=head.next;
newcrupre=newcru;//更新newcru和newcrupre
newcru=newcru.next;
newcru.next=null;//防止成环
}else{//尾插
cru=head.next;
head.next=newcrupre.next;
newcrupre.next=head;
head=cru;
}
i++;
}
return newhead.next;
}
上海得物信息集团有限公司公司福利 1208人发布

查看6道真题和解析