450-K组翻转链表

给你一个链表以及一个k,将这个链表从头指针开始每k个翻转一下。

链表元素个数不是k的倍数,最后剩余的不用翻转。

样例

给出链表 1->2->3->4->5

k = 2, 返回 2->1->4->3->5

k = 3, 返回 3->2->1->4->5

标签

链表 脸书

思路(使用栈,空间复杂度O(k))

一个简单的方法是,使用一个栈记录一组待翻转数

  • 首先用 end 指针定位一组数的尾部,begin 定位一组数的首部,在定位尾部时将结点值入栈
  • 若栈的大小等于 k,表示这组数可以翻转,便从 begin 开始,将此节点值改为栈顶元素,并出栈

code

/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/ class Solution {
public:
/*
* @param head: a ListNode
* @param k: An integer
* @return: a ListNode
*/
ListNode * reverseKGroup(ListNode * head, int k) {
// write your code here
if (k <= 0 || head == NULL || head->next == NULL) {
return head;
}
stack<int> stack;
ListNode *begin = head, *end = head;
while (end != NULL) {
for (int i = 0; i < k && end != NULL; i++) {
stack.push(end->val);
end = end->next;
}
if (stack.size() == k) {
for (int i = 0; i < k; i++) {
begin->val = stack.top();
begin = begin->next;
stack.pop();
}
}
}
return head;
}
};

最新文章

  1. C++的性能C#的产能?! - .Net Native 系列五:.Net Native与反射
  2. Android 中shape的使用(圆角矩形)
  3. Binary Tree Postorder Traversal
  4. Spring源码学习之:FactoryBean的使用
  5. 队列Queue
  6. 【Python】 [基础] 条件判断 与 循环 与dict和set
  7. lnmp重置mysql密码
  8. Spring的自定义标签
  9. BundleConfig 的使用 通配符
  10. Oracle通过sqlplus spool导入导出数据
  11. Codeforces Round #123 (Div. 2)
  12. wuzhicms刷新按钮的功能开发
  13. 对XML和YAML文件实现I/O操作
  14. 用sql语句写排名
  15. HDU3994(Folyd + 期望概率)
  16. Struts2 请求数据的自动封装 及 自定义转换器类
  17. ThinkPhp框架 分页 和session验证的使用
  18. sed命令(二)
  19. Vysor Pro破解助手
  20. git 琐碎

热门文章

  1. ElasticSearch优化系列三:机器设置(内存)
  2. 【原创】CRM 2015/2016,SSRS 生成PDF文件,幷以附件的形式发送邮件
  3. linux-2.6.22.6内核启动分析之head.S引导段代码
  4. VCC、VDD、VSS以及VBAT的区别
  5. Java学习笔记二十九:一个Java面向对象的小练习
  6. C语言中的if与else if
  7. 关于makefile中自动产生依赖的理解
  8. 自己用原生JS写的轮播图,支持移动端触摸滑动,分页器圆点可以支持mouseover鼠标移入和click点击,高手看了勿喷哈
  9. Oracle入门第二天(上)——基本查询SQL
  10. Java设计模式(24)——行为模式之解释器模式(Interpreter)