题目链接: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;
}
};

最新文章

  1. 你的眼睛背叛你的心:解决 .NET Core 中 GetHostAddressesAsync 引起的 EnyimMemcached 死锁问题
  2. python3使用pyqt5制作一个超简单浏览器
  3. Power BI FAQ
  4. Android开发艺术探索笔记——View(二)
  5. 使用SubLineText3
  6. hdu 2057
  7. 让边框和文本一样高,不受line-height影响,可以使用padding,padding可以用于行内元素
  8. UIViewAnimationOptions swift 2
  9. kettle的jdk1.7环境变量配置
  10. git(icode)分支及发布管理方式
  11. 深刻理解C#中资源释放
  12. hotplug\uevent机制(1)
  13. Hibernate 性能优化之查询缓存
  14. 设置windows窗口ICON 【windows 编程】【API】【原创】
  15. (原)在ubuntu 中安装 swi prolog 和 简单的使用
  16. CentOS 7解决Local Time与实际时间相差8小时问题
  17. redsocks 设置全局代理
  18. 第11天:JS中变量、字符串基础知识
  19. java常用字节流
  20. PS 滤镜——平面坐标变换到极坐标

热门文章

  1. python正常时间和unix时间戳相互转换的方法
  2. java 重新学习 (一)
  3. 免费服务器AWS免费使用一年详细教程
  4. leetcode python反转字符串中的单词
  5. strtotime 获取当月最后一天的日期
  6. PAT(A) 1042. Shuffling Machine (20)
  7. Python升级3.多
  8. Java技术专区-虚拟机系列-虚拟机参数(常用)
  9. 1、eureka注册中心单机
  10. spring基于xml的事务控制