链表翻转(按K个一组)

问题描述

链表翻转。给出一个链表和一个数k,比如链表1→2→3→4→5→6,k=2,翻转后2→1→4→3→6→5,若k=3,翻转后3→2→1→6→5→4,若k=4,翻转后4→3→2→1→5→6

 

public static LinkNode reverseK(LinkNode node, int k){
	if(null == node || k <= 0){
		return node;
	}

	LinkNode fast = node;
	LinkNode pre = null;
	LinkNode root = null;

	while(null != fast){
		int t = k;
		LinkNode slow = fast;
		while(t-- > 1){
			if(null == fast.next){
				break;
			}

			fast = fast.next;
		}
		if(null == root){
			root = fast;
		}

		LinkNode tmp = fast.next;
		reverse(slow, fast);

		slow.next = tmp;
		if(null != pre) {
			pre.next = fast;
		}
		pre = slow;
		fast = tmp;
	}

	return root;
}

public static void reverse(LinkNode node, LinkNode endNode){
	if(null == node){
		return;
	}

	LinkNode pre = null;
	while(null != node){
		LinkNode next = node.next;
		node.next = pre;
		pre = node;

		if(null == next || node == endNode){
			break;
		}
		node = next;
	}

	return;
}

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值