[算法] 将单链表的每K个节点之间逆序
题目
给定一个单链表的头结点,实现一个调整单链表的函数,使得每K个节点之间逆序,如果最后不够K个节点一组,则不调整最后几个节点。
解答
使用栈结构
import java.util.Stack;
public class Test{
static class Node{
public int val;
public Node next;
public Node(int val){
this.val=val;
}
}
public static void main(String[] args) {
Node head=new Node(1);
head.next=new Node(2);
head.next.next=new Node(3);
head.next.next.next=new Node(4);
head.next.next.next.next=new Node(5);
head.next.next.next.next.next=new Node(6);
Node node=reverseKNodes(head,2);
while(node!=null){
System.out.print(node.val+" ");
node=node.next;
}
}
public static Node reverseKNodes(Node head, int K){
if (K<2) {
return head;
}
Stack<Node> stack=new Stack<>();
Node newHead=head;
Node cur=head;
Node pre=null;
Node next=null;
while(cur!=null){
stack.push(cur);
next=cur.next;
if (stack.size()==K) {
pre=resign(stack,pre,next);
newHead=newHead==head?cur:newHead;
}
cur=next;
}
return newHead;
}
public static Node resign(Stack<Node> stack,Node left,Node right){
Node cur=stack.pop();
if (left!=null) {
left.next=cur;
}
Node next=null;
while(!stack.isEmpty()){
next=stack.pop();
cur.next=next;
cur=next;
}
cur.next=right;
return cur;
}
}
输出:2 1 4 3 6 5
不使用栈结构
import java.util.Stack;
public class Test{
static class Node{
public int val;
public Node next;
public Node(int val){
this.val=val;
}
}
public static void main(String[] args) {
Node head=new Node(1);
head.next=new Node(2);
head.next.next=new Node(3);
head.next.next.next=new Node(4);
head.next.next.next.next=new Node(5);
head.next.next.next.next.next=new Node(6);
Node node=reverseKNodes(head,2);
while(node!=null){
System.out.print(node.val+" ");
node=node.next;
}
}
public static Node reverseKNodes(Node head, int K){
if (K<2) {
return head;
}
Node cur=head;
Node pre=null;
Node next=null;
Node start=null;
int count=1;
while(cur!=null){
next=cur.next;
if (count==K) {
start=pre==null?head:pre.next;
head=pre==null?cur:head;
resign(pre,start,cur,next);
pre=start;
count=0;
}
count++;
cur=next;
}
return head;
}
public static void resign(Node left,Node start,Node end, Node right){
Node pre=start;
Node cur=start.next;
Node next=null;
while(cur!=right){
next=cur.next;
cur.next=pre;
pre=cur;
cur=next;
}
if (left!=null) {
left.next=end;
}
start.next=right;
}
}
[算法] 将单链表的每K个节点之间逆序的更多相关文章
- 将单链表的每K个节点之间逆序
[说明]: 本文是左程云老师所著的<程序员面试代码指南>第二章中“将单链表的每K个节点之间逆序”这一题目的C++复现. 本文只包含问题描述.C++代码的实现以及简单的思路,不包含解析说明, ...
- 【链表问题】打卡9:将单链表的每K个节点之间逆序
前言 以专题的形式更新刷题贴,欢迎跟我一起学习刷题,相信我,你的坚持,绝对会有意想不到的收获.每道题会提供简单的解答,如果你有更优雅的做法,欢迎提供指点,谢谢. 注:如果代码排版出现了问题麻烦通知我下 ...
- 栈和队列----将单链表的每K个节点之间逆序
将单链表的每K个节点之间逆序 给定一个单链表的头节点head,实现一个调整链表的函数,使得每K 个节点之间逆序,如果最后剩下不够K 个节点,则不调整最后几个. 例如: 链表:1—>2—>3 ...
- 算法总结之 将单链表的每K个节点之间逆序
给定一个单链表的表头节点head,实现一个调整单链表的函数,是的每k个节点之间逆序,如果最后不够k个节点一组,则不调整最后几个节点 思路: 如果k的值小于2,不调整.k<1 没有意义,k==1代 ...
- 左神算法书籍《程序员代码面试指南》——2_11将单链表的每K个节点之间逆序
[题目]给定一个单链表的头节点head,实现一个调整单链表的函数,使得每K个节点之间逆序,如果最后不够K个节点一组,则不调整最后几个节点.例如:链表:1->2->3->4->5 ...
- [程序员代码面试指南]链表问题-将单链表的每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 ...
- [剑指offer] 14. 链表中倒数第K个节点+翻转+逆序打印+合并两个排序链表 + 链表相交(第一个公共节点) (链表)
题目描述 输入一个链表,输出该链表中倒数第k个结点. 思路: 两个指针,起始位置都是从链表头开始,第一个比第二个先走K个节点,当第一个走到链表尾时,第二个指针的位置就是倒数第k个节点.(两指针始终相 ...
- 【链表问题】打卡2:删除单链表的第 K个节点
前言 以专题的形式更新刷题贴,欢迎跟我一起学习刷题.每道题会提供简单的解答. 题目描述 在单链表中删除倒数第 K 个节点 要求 如果链表的长度为 N, 时间复杂度达到 O(N), 额外空间复杂度达到 ...
随机推荐
- Domino移动Web上传的附件到RichText域
只是从网上拷贝下来,没有测试. 得到上传文件的路径http://searchdomino.techtarget.com/tip/Trap-an-attachment-path-via-the-Domi ...
- iOS-如何在项目中使用CocoaPods
1.打开终端. 2.将项目文件夹拖入到cd空格 后面. 3.回车,看下现在的路径是. 4.我们输入vim podfile回车,建立Podfile文件. 5.进到这个界面,我们再按i编辑--你会看到下面 ...
- Android中流式布局和热门标签
1.流式布局特点.应用场景.2.自定义ViewGroup (1)onMeasure:测量子View的宽和高,设置自己的宽和高. (2)onLayout:设置子View的位置. onMeasure:根据 ...
- SQL转换全角和半角函数
SQL转换全角和半角函数 CREATE FUNCTION f_Convert( ), --要转换的字符串 @flag bit --转换标志,0转换成半角,1转换成全角 )) AS BEGIN ),@s ...
- Spring Security OAuth2 授权失败(401) 问题整理
Spring Cloud架构中采用Spring Security OAuth2作为权限控制,关于OAuth2详细介绍可以参考 http://www.ruanyifeng.com/blog/2014/0 ...
- JavaScript学习笔记-Js操控HTML5 <progress> 标签
Js操控----HTML5 <progress> 标签 简单模拟下下载进度跑条 <h4>加载进度</h4> <input type="button& ...
- mfc中 控件 对话框 添加颜色 背景图片
1 设置对话框透明 在设置控件颜色中要使用 nCtlColor Contains one of the following values, specifying the type of control ...
- Milking Time---poj3616(简单dp)
题目链接:http://poj.org/problem?id=3616 题意:人从奶牛身上挤奶有m个时间段(1----n),每个时间段包含 s e f 表示从 s 到 e 的这段时间可以获得 f 单位 ...
- Android学习八---OpenCV JAVA API
OpenCV java API的文档说明在OpenCV-2.4.10-android-sdk/sdk/java/javadoc/index.html的文件夹下. 想用java API的方式进行Open ...
- asp.net Mvc Npoi 导出导入 excel
因近期项目遇到所以记录一下: 首先导出Excel : 首先引用NPOI包 http://pan.baidu.com/s/1i3Fosux (Action一定要用FileResult) /// < ...