将单链表的每k个节点之间逆序

public static Node reversek(Node head,int k){
if(k<2) return head;
Node cur=head; //当前结点
Node next=null; //下一结点
Node pre=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;  //第一組的逆序前的第k个节点
resign(pre,start,cur,next);   //逆序
pre=start; //上一组数逆序之前的第一个,逆序之后的最后一个
count=0;
}
count++;
cur=next; //当前结点指向下一个
}
return head;
}
public static void resign(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; //连上下组第一个结点
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值