LeetCode 25.Reverse Nodes in k-Group

题目

Given a linked list, reverse the nodes of a linked list k at a time and return its modified list.
k is a positive integer and is less than or equal to the length of the linked list. If the number of nodes is not a multiple of k then left-out nodes in the end should remain as it is.
Given this linked list: 1->2->3->4->5
For k = 2, you should return: 2->1->4->3->5
For k = 3, you should return: 3->2->1->4->5

思路

这道题的意思是每K个节点一组翻转链表,如果最后还剩不够K个,就维持不变。
那么思路也很明显,每K个一组反转就行,考虑到之前做过的翻转链表,先试一下能不能直接拿来用,翻转函数得到的是一个新链表,如果进行每K个一组得到一个新链表,就要进行链表的拼接,而链表拼接必须有尾指针,这样以来每一次拼接都需要遍历链表,比较麻烦,所以把之前的函数修改一下。
通常反转一个链表需要加一个头结点,将取下来的节点接在头结点后面。再定义一个指针要么指向要取下来的节点,要么指向root节点后面的节点。这里我们定义成root节点后面的节点,因为循环完一轮之后,指针一动可能造成空指针异常。,因此有了如下代码

ListNode node = head.next;
root.next=head.next;
head.next=root.next.next;
root.next.next=node;

加上for(inti=0;i<k-1:i++)循环,这里注意,循环只进行了k-1次,k-1个节点移动到第一个节点的前面,循环完毕后head指向一开始的第一个节点,node没变,root没变。考虑剩余节点情况,剩余节点的数量很可能小于K甚至为0,所以下一遍循环之前要进行判断剩余节点的数量,最简单的方法就是数出所有节点的数量,每次循环减去K自然得到剩余节点数量。

while(count>=k)
    for(int i=0;i<k-1;i++){
        ListNode node = root.next;
        root.next=head.next;
        head.next=root.next.next;
        root.next.next=node;
    }
    root=head;
    head=root.next;
    count=count-k;
}

核心代码完成,补充上各种变量即可。

tips

Memory Limit Exceeded 这个错误基本不是由与变量定义太多造成的,大概率是程序逻辑有问题。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
毕业设计,基于SpringBoot+Vue+MySQL开发的公寓报修管理系统,源码+数据库+毕业论文+视频演示 现代经济快节奏发展以及不断完善升级的信息化技术,让传统数据信息的管理升级为软件存储,归纳,集中处理数据信息的管理方式。本公寓报修管理系统就是在这样的大环境下诞生,其可以帮助管理者在短时间内处理完毕庞大的数据信息,使用这种软件工具可以帮助管理人员提高事务处理效率,达到事半功倍的效果。此公寓报修管理系统利用当下成熟完善的Spring Boot框架,使用跨平台的可开发大型商业网站的Java语言,以及最受欢迎的RDBMS应用软件之一的MySQL数据库进行程序开发。公寓报修管理系统有管理员,住户,维修人员。管理员可以管理住户信息和维修人员信息,可以审核维修人员的请假信息,住户可以申请维修,可以对维修结果评价,维修人员负责住户提交的维修信息,也可以请假。公寓报修管理系统的开发根据操作人员需要设计的界面简洁美观,在功能模块布局上跟同类型网站保持一致,程序在实现基本要求功能时,也为数据信息面临的安全问题提供了一些实用的解决方案。可以说该程序在帮助管理者高效率地处理工作事务的同时,也实现了数据信息的整体化,规范化与自动化。 关键词:公寓报修管理系统;Spring Boot框架;MySQL;自动化;VUE
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值