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
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值