左神算法书籍《程序员代码面试指南》——2_11将单链表的每K个节点之间逆序
【题目】
给定一个单链表的头节点head,实现一个调整单链表的函数,使得每K个节点之间逆序,如果最后不够K个节点一组,则不调整最后几个节点。
例如:
链表:1->2->3->4->5->6->7->8->null,K = 3。
调整后为:3->2->1->6->5->4->7->8->null。其中7、8不调整,因为不够一组。
【解题思路】
方法一:
使用栈,每K个节点依次入栈,并依次删除
然后栈弹出尾插法插入节点
方法二:
直接在链表中使用头插法,进行反转
#include <iostream>
#include <stack>
using namespace std; struct Node
{
int val;
Node* next;
Node(int a = ) :val(a), next(nullptr) {}
};
void printList(Node* head)
{
Node *p = head->next;
while (p)
{
cout << p->val << "->";
p = p->next;
}
cout << endl;
} void byStack(Node* head, int k)
{
Node* p = head->next, *pre = head;
stack<Node*>s;//保留节点地址,就不用删除和新建节点步骤
while (p)
{
s.push(p);
p = p->next;
if (s.size() == k)
{
pre->next = p;
while (!s.empty())
{
s.top()->next = pre->next;//断开循环
pre->next = s.top();
pre = pre->next;
s.pop();
}
}
}
printList(head);
} void notStack(Node* head, int k)
{
Node* p = head->next, *pre = head, *q, *tmp = nullptr;
int s = ;
while (p)
{
if (s == )
{
tmp = pre->next;//每次循环更新的头结点
pre->next = nullptr;//断开循环
}
q = p->next;
p->next = pre->next;
pre->next = p;
p = q;
s++;
if (s == k)
{
s = ;
pre = tmp;
pre->next = p;
}
}
tmp->next = nullptr;
p = pre->next;
pre->next = nullptr;//断开循环
while (p)//将后面不足k个节点还原
{
q = p->next;
p->next = pre->next;
pre->next = p;
p = q;
}
printList(head);
} int main()
{
Node *head = new Node(-);
Node* p = head;
for (int i = ; i <= ; ++i)
{
Node*q = new Node(i);
p->next = q;
p = q;
}
printList(head);
//byStack(head, 3);
notStack(head, );
return ;
}
左神算法书籍《程序员代码面试指南》——2_11将单链表的每K个节点之间逆序的更多相关文章
- [程序员代码面试指南]链表问题-将单链表的每k个节点之间逆序
题目描述 给定一个单链表的表头节点head,实现一个调整单链表的函数,是的每k个节点之间逆序,如果最后不够k个节点一组,则不调整最后几个节点. 题解 内部函数reverse实现链表beg到end的翻转 ...
- 《程序员代码面试指南》第二章 链表问题 将单链表每K个节点之间逆序
样例 链表1-2-3-4-5-6-7-8-9-10 K=3 ,结果 3-2-1-6-5-4-9-8-7-10 java代码 /** * @Description:将单链表每K个节点之间逆序 * @Au ...
- 《程序员代码面试指南》第二章 链表问题 在单链表和双链表中删除倒数第K个节点
题目 在单链表和双链表中删除倒数第K个节点 java代码 /** * @Description:在单链表和双链表中删除倒数第K个节点 * @Author: lizhouwei * @CreateDat ...
- 左神算法书籍《程序员代码面试指南》——2_03删除链表的中间节点和a/b处的节点
[题目]给定链表的头节点head,实现删除链表的中间节点的函数.例如:不删除任何节点:1->2,删除节点1:1->2->3,删除节点2:1->2->3->4,删除节 ...
- 《程序员代码面试指南》第二章 链表问题 删除中间节点和a/b处节点
题目 例如 1-2-3-4 删除2,1-2-3-4-5 删除3 例如 a=1,b =2 java代码 /** * @Description:删除中间节点和a/b处节点 * @Author: lizho ...
- [程序员代码面试指南]二叉树问题-在二叉树中找到两个节点的最近公共祖先、[LeetCode]235. 二叉搜索树的最近公共祖先(BST)(非递归)
题目 题解 法一: 按照递归的思维去想: 递归终止条件 递归 返回值 1 如果p.q都不在root为根节点的子树中,返回null 2 如果p.q其中之一在root为根节点的子树中,返回该节点 3 如果 ...
- 程序员代码面试指南:IT名企算法与数据结构题目最优解
第1章栈和队列 1设计一个有getMin功能的栈(士★☆☆☆) 1由两个栈组成的队列(尉★★☆☆) 5如何仅用递归函数和栈操作逆序一个栈(尉★★☆☆) 8猫狗队列(士★☆☆☆)10用一个栈实现另一 ...
- 程序员代码面试指南 IT名企算法与数据结构题目最优解
原文链接 这是一本程序员面试宝典!书中对IT名企代码面试各类题目的最优解进行了总结,并提供了相关代码实现.针对当前程序员面试缺乏权威题目汇总这一痛点,本书选取将近200道真实出现过的经典代码面试题,帮 ...
- 左神算法书籍《程序员代码面试指南》——3_05Morris遍历二叉树的神级方法【★★★★★】
[问题]介绍一种时间复杂度O(N),额外空间复杂度O(1)的二叉树的遍历方式,N为二叉树的节点个数无论是递归还是非递归,避免不了额外空间为O(h),h 为二叉树的高度使用morris遍历,即利用空节点 ...
随机推荐
- Kafka和RabbitMQ 对比
1) Kafka成为业界大数据松耦合架构,异步,队列 特点:吞吐量高50m/s. Kafka和RabbitMQ都是MQ机制,它差异 Kafka作为大数据产品,可以作为数据源,也可以作为结果数据中转 ...
- System.Clollections.ICollection.cs
ylbtech-System.Clollections.ICollection.cs 1.程序集 mscorlib, Version=4.0.0.0, Culture=neutral, PublicK ...
- django2 rest_framework + vue.js + mysql5.6 实现增删改查
1.安装pymysql,mysqlclient,创建项目django-admin startproject django3 2.在Mysql中创建一个数据库叫django3db,打开项目,修改一下数据 ...
- NYOJ 119 士兵杀敌(三)【ST算法】 分类: Brush Mode 2014-11-13 20:56 101人阅读 评论(0) 收藏
题目链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=119 解题思路: RMQ算法. 不会的可以去看看我总结的RMQ算法. http://blo ...
- 如何使用Python-GnuPG和Python3 实现数据的解密和加密
介绍 GnuPG包提供用于生成和存储加密密钥的完整解决方案.它还允许您加密和签名数据和通信. 在本教程中,您将创建一系列使用Python 3和python-gnupg模块的脚本.这些脚本允许您对多个文 ...
- markdown实现页内目录跳转
1.实现页内目录跳转 语法: 页面首部添加目录:[目录](#jump_id) 页面内部锚点:<span id='jump_id'>标题</span>
- JDK9新特性实战:简化流关闭新姿势。
做Java开发的都知道,每个资源的打开都需要对应的关闭操作,不然就会使资源一直占用而造成资源浪费,从而降低系统性能. 关于资源的关闭操作,从JDK7-JDK9有了不少的提升及简化. JDK6 在JDK ...
- layui表格监听开关并获取改行id
,{field:'sex', title:'性别', width:85, templet: '#switchTpl', unresize: true} <script type="te ...
- stop slave->reset slave->start slave 复制从哪个位置开始?reset slave all呢?
reset slave首先来看下当前master-slave情况 mysql> prompt \u@\h,\p:\d>\_ PROMPT set to '\u@\h,\p:\d>\_ ...
- css盒模型问题
css盒模型问题 1.基本概念:标准模型和ie模型 2.标准模型和ie模型的区别 3.css如果设置这两种模型 4.js如何获取盒模型的宽高 5.边距重叠 6.BFC 1.CSS盒模型本质上是一个盒子 ...