LeetCode25 - reverse nodes in k groups

【题目】

将链表以k个为一组进行翻转,要求与24相同

【思路】

定义r_curr指向即将进行翻转的k个元素的紧邻的前一个元素;

定义r依次遍历将要进行翻转的k个元素,并最终执行其紧邻的后一个元素;

将遍历到的k个listnode放入数组中,进行翻转操作,最后将r_curr的next指向翻转后的列表,重复该过程直至完成

【Java代码】

	public ListNode reverseKGroup(ListNode head, int k){
		boolean flag_head = true;
		ListNode[] candidate = new ListNode[k];
		ListNode r = head;
		ListNode r_curr = null;
		boolean flag = false;
		while(r != null){
			for(int i = 0 ; i < k ; i++){
				if(r == null){
					flag = true;
					break;
				}
				candidate[i] = r;
				r = r.next;
			}
			if(flag)
				break;
			candidate[0].next = r;
			for(int i = 1 ; i < k ; i++){
				candidate[i].next = candidate[i-1];
			}
			if(flag_head){
				head = candidate[k-1];
				flag_head = false;
				r_curr = head;
				for(int i = 0 ; i < k-1 ; i++){
					r_curr = r_curr.next;
				}
			}else{
				r_curr.next = candidate[k-1];
				for(int i = 0 ; i < k ; i++)
					r_curr = r_curr.next;
			}
		}
		return head;
	}

【递归】

该题目也可以由递归实现,只对前k个元素进行详细翻转说明,后面部分的翻转结果直接由递归函数得到

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值