LeetCode K个一组翻转链表
2024-09-01 03:12:41
题目链接:https://leetcode-cn.com/problems/reverse-nodes-in-k-group/
题目大意
略。
分析
逆转每一段,然后和上一段与下一段衔接即可,加头结点会比较方便。
代码如下
/**
* 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 == NULL || k == ) return head; int len = getLen(head);
ListNode *start = head, *lastTail = new ListNode(), *newhead = lastTail;
newhead->next = head; for(int i = ; i < len / k; ++i) {
lastTail->next = reverseGroup(start, k); // 和上一段尾巴接上
lastTail = start;
start = lastTail->next;
} return newhead->next;
} // 返回反转链表的头结点,顺便把尾部接到下一段头部
ListNode* reverseGroup(ListNode* head, int k) {
ListNode *p1 = head, *p2 = head->next; for(int i = ; i < k - ; ++i) {
head->next = p2->next;
p2->next = p1;
p1 = p2;
p2 = head->next;
} return p1;
} int getLen(ListNode *head, ListNode *end = NULL) {
int ret = ;
while(head != end) {
++ret;
head = head->next;
}
return ret;
}
};
最新文章
- 你的眼睛背叛你的心:解决 .NET Core 中 GetHostAddressesAsync 引起的 EnyimMemcached 死锁问题
- python3使用pyqt5制作一个超简单浏览器
- Power BI FAQ
- Android开发艺术探索笔记——View(二)
- 使用SubLineText3
- hdu 2057
- 让边框和文本一样高,不受line-height影响,可以使用padding,padding可以用于行内元素
- UIViewAnimationOptions swift 2
- kettle的jdk1.7环境变量配置
- git(icode)分支及发布管理方式
- 深刻理解C#中资源释放
- hotplug\uevent机制(1)
- Hibernate 性能优化之查询缓存
- 设置windows窗口ICON 【windows 编程】【API】【原创】
- (原)在ubuntu 中安装 swi prolog 和 简单的使用
- CentOS 7解决Local Time与实际时间相差8小时问题
- redsocks 设置全局代理
- 第11天:JS中变量、字符串基础知识
- java常用字节流
- PS 滤镜——平面坐标变换到极坐标