【重点】LeetCode 25. Reverse Nodes in k-Group
LeetCode 25. Reverse Nodes in k-Group
博客转载自:http://www.cnblogs.com/grandyang/p/4441324.html
Solution1:【重点理解记忆!!!】
代码要好好画几个图才能理解,建议花k = 5,链表长度为7的试一试才能深刻理解~
此解法和LeetCode24看似差不多,但细节处不一样~
这道题让我们以每k个为一组来翻转链表,实际上是把原链表分成若干小段,然后分别对其进行翻转,那么肯定总共需要两个函数,一个是用来分段的,一个是用来翻转的,我们就以题目中给的例子来看,对于给定链表1->2->3->4->5,一般在处理链表问题时,我们大多时候都会在开头再加一个dummy node,因为翻转链表时头结点可能会变化,为了记录当前最新的头结点的位置而引入的dummy node,那么我们加入dummy node后的链表变为-1->1->2->3->4->5,如果k为3的话,我们的目标是将1,2,3翻转一下,那么我们需要一些指针,pre和next分别指向要翻转的链表的前后的位置,然后翻转后pre的位置更新到如下新的位置:
-1->1->2->3->4->5| |
pre next-1->3->2->1->4->5| |pre next
代码
/*** Definition for singly-linked list.* struct ListNode {* int val;* ListNode *next;* ListNode(int x) : val(x), next(NULL) {}* };*/
class Solution {
public:ListNode *reverseKGroup(ListNode *head, int k) {if (!head || k == 1) return head;ListNode *dummy = new ListNode(-1);ListNode *pre = dummy, *cur = head;dummy->next = head;int i = 0;while (cur) {++i;if (i % k == 0) {pre = reverseOneGroup(pre, cur->next);cur = pre->next;} else {cur = cur->next;}}return dummy->next;}ListNode *reverseOneGroup(ListNode *pre, ListNode *next) {ListNode *last = pre->next;ListNode *cur = last->next;while(cur != next) {last->next = cur->next;cur->next = pre->next;pre->next = cur;cur = last->next;}return last;}
};
Solution2:
我们使用递归来做,我们用head记录每段的开始位置,cur记录结束位置的下一个节点,然后我们调用reverse函数来将这段翻转,然后得到一个new_head,原来的head就变成了末尾,这时候后面接上递归调用下一段得到的新节点,返回new_head即可,参见代码如下:
class Solution {
public:ListNode* reverseKGroup(ListNode* head, int k) {ListNode *cur = head;for (int i = 0; i < k; ++i) {if (!cur) return head;cur = cur->next;}ListNode *new_head = reverse(head, cur);head->next = reverseKGroup(cur, k);return new_head;}ListNode* reverse(ListNode* head, ListNode* tail) {ListNode *pre = tail;while (head != tail) {ListNode *t = head->next;head->next = pre;pre = head;head = t;}return pre;}
};
【重点】LeetCode 25. Reverse Nodes in k-Group相关推荐
- LeetCode - 25. Reverse Nodes in k-Group
25. Reverse Nodes in k-Group Problem's Link -------------------------------------------------------- ...
- LeetCode 25 Reverse Nodes in k-Group Add to List (划分list为k组)
题目链接: https://leetcode.com/problems/reverse-nodes-in-k-group/?tab=Description Problem :将一个有序list划分为k ...
- leetcode 25. Reverse Nodes in k-Group | 25. K 个一组翻转链表(Java)
题目 https://leetcode.com/problems/reverse-nodes-in-k-group/ 题解 乍一看以为很容易:每 k 个节点翻转,若剩余不足 k 个,则不变.没有什么技 ...
- 25. Reverse Nodes in k-Group
https://leetcode.com/problems/reverse-nodes-in-k-group/description/ 题意:给一个链表和一个正数k,将链表划分成多个长度为k的链,将这 ...
- 【leetcode】25. Reverse Nodes in k-Group 链表按K分段逆序
1. 题目 Given a linked list, reverse the nodes of a linked list k at a time and return its modified li ...
- 【LeetCode】863. All Nodes Distance K in Binary Tree 解题报告(Python)
[LeetCode]863. All Nodes Distance K in Binary Tree 解题报告(Python) 作者: 负雪明烛 id: fuxuemingzhu 个人博客: http ...
- 【重点】LeetCode 24. Swap Nodes in Pairs
LeetCode 24. Swap Nodes in Pairs 参考网址:http://www.cnblogs.com/grandyang/p/4441680.html 此题算是链表中比较考察细节的 ...
- LeetCode之Reverse String II
1.题目 Given a string and an integer k, you need to reverse the first k characters for every 2k charac ...
- LeetCode 974. 和可被 K 整除的子数组(哈希map)
1. 题目 给定一个整数数组 A,返回其中元素之和可被 K 整除的(连续.非空)子数组的数目. 示例: 输入:A = [4,5,0,-2,-3,1], K = 5 输出:7 解释: 有 7 个子数组满 ...
最新文章
- java全能速查宝典.chm_Java API 快速速查宝典
- BZOJ1566:[NOI2009]管道取珠——题解
- html怎么给框格加背景图,怎么给word 2013表格添加漂亮的背景图片
- Lost Cows POJ - 2182(线段树)
- PHP自学3——在html的table标签中显示用户提交表单
- CentOS7没有ifconfig命令的解决方法
- linux 帐号 配置sftp_Linux 下sftp配置之密钥方式登录详解
- 小李飞刀:SQL题目刷起来!
- 一次weblogic 在aix hacmp上调试过程
- Spring Boot + Thymeleaf + Activiti 快速开发平台项目,附源码!
- Markdown打造高逼格博客
- LINUX中获得cpu名称
- 顺序输出一个整数的各位数字
- php 正态分布数据描述,啥?你的数据不呈正态分布,文章发不了:stata一键搞定...
- 【AD】altium designer绘制原理图使用教程
- php 通过 谷歌邮箱发送邮件
- KMplayer附加音轨设置及影音同步问题
- QT笔记——Qt动态属性 之 unpolish() 和 polish()
- ssm搭建整合,这一篇你直接拷走就是一个搭好的框架,前后端可分离,可不分离
- BLOXORZ 游戏攻略
热门文章
- 视觉slam学习笔记以及课后习题《第五讲特征点法视觉里程计》
- VScode+远程服务器docker+C/C++ 代码挑战配置
- 反向传播(Back Propagation)与神经网络(Neural Network)
- java维护_java配置和维护
- vscode 背景图片的设置
- arm中断保护和恢复_ARM中断处理过程
- python开发工具和框架安装器_Python基础框架和工具
- android 图片存储读取数据库中,如何在android中存储(位图图像​​)并从sqlite数据库中检索图像?...
- 正则表达式python_Python正则表达式
- Android Material Components – MaterialAlertDialog