前言:单链表的逆置总是看完博客,当时懂了过一段时间就忘了,还是动手写一下加深一下印象吧。
参考博客:点击打开链接
demo地址:我的github
package com.example.demo_24_chain_reversed;
public class Node {
public int value;
public Node nextNode;
public Node(int value) {
this.value = value;
}
@Override
public String toString() {
return this.value + "-->" + (nextNode != null ? nextNode.toString() : "null");
}
}
用专业的话来说就是:递归方法用的是栈的思想,先把头结点入栈,接着头结点的下一个结点入栈,直到尾结点位置,
接着依次把栈内的元素出栈,并更换其下一个结点对应的对象:
我个人理解就是一个单链表的逆置总是可以分解成一个head和它nextNode的逆置,只要head的nextNode逆置好了,然后再添上head就好了,这就用到了递归。上面我打印出的log也可以看出来。
package com.example.demo_24_chain_reversed;
public class MyClass {
public static void main(String[] args){
Node a = new Node(1);
Node b = new Node(2);
Node c = new Node(3);
Node d = new Node(4);
a.nextNode = b;
b.nextNode = c;
c.nextNode = d;
//reverseChainRecursive(a);
reverseChainNotRecursive(a);
}
private static Node reverseChainRecursive(Node head){
System.out.println("before "+ head);
if(head == null || head.nextNode == null){
System.out.println("after " + head);
return head;
}
Node headOfReverseChain = reverseChainRecursive(head.nextNode);
head.nextNode.nextNode = head;
head.nextNode = null;
System.out.println("after "+ headOfReverseChain);
return headOfReverseChain;
}
private static Node reverseChainNotRecursive(Node head) {
Node pre = head;
Node cur = head.nextNode;
Node tmp;
// 头结点的nextNode应该要置空
pre.nextNode = null;
while (cur != null) {
// 先存放nex结点
tmp = cur.nextNode;
// 修改next结点指向pre
cur.nextNode = pre;
System.out.println("not ready "+ tmp);
System.out.println("already "+ cur);
System.out.println("---------");
pre = cur;
cur = tmp;
}
return pre;
}
}
最初编写这套视频解析组件的时候,面对的场景是视频监控行业,对应设备都是网络监控摄像机,传过来的都是rtsp这种视频流,做过这一块的人都知道,打开某个视频流默认耗时比较大,基本上在2s左右,那是因为ffmpeg接口内部读取的最大数据量 formatCtx->probesize(从源文件中读取的最大字节数)值是5000000,导致这里卡很久最耗时,可以调小来加快打开速度。
数据Data描述事物的符号记录成为数据.数据是数据库中存储的基本对象. 除了基本的数字之外、像图书的名称、价格、作者都可以称为数据.将多种数据记录列成一张表.通过数据表管理数据.每一行的数据成为记录(recorder),每一列的内容叫做字段(列field)每一列都有自己的数据类型.数据库Database...
1. 进入Python虚拟环境:workon django_py32.进入fdfs_client-py-master.zip所在目录3.pip install fdfs_client-py-master.zip第3步如果报错:fdfs_client/sendfilemodule.c:43:20: fatal error: Python.h: 没有那个文件或目录, error: command 'x86_64-linux-gnu-gcc' failed with exit stat...
Guava是一组核心库,包括新的集合类型(例如multimap和multiset),不可变集合,图形库,函数类型,内存缓存以及用于并发,I / O,散列,基元的API /实用程序,反射,字符串处理等等!本示例只使用了Guava工具包的RateLimiter类,进行API的限流。限流简介:限流中的“流”字该如何解读呢?要限制的指标到底是什么?不同的场景对“流”的定义也是不同的,可以是网络流量,...
在项目开发时,字符串跟整形的转换是普遍需求的一个功能,在c/c++中常用的几个函数包括strtol strtoll strtoul strtoull。目前我们的项目里面进行转换的时候都是直接调用,对被转换的字符串是否有效,转换是否成功都没有一个基本的判断,一直想研究下,今天正好有空,仔细看了下linux man page中这几个函数的详细解释.声明#include <stdlib.h>...
以下内容整理自http://how2j.cn/k/spring/spring-aop/89.html#nowhere和http://how2j.cn/k/spring/spring-annotaion-aop/1068.html#nowhere1.Spring的AOP特性 AOP 即 Aspect Oriented Program 面向切面编程 首先,在面向切面编程的...
见字如面,我是军哥!周末了,来看篇轻松的文章。1983 年,美国计算机协会将图灵奖授予肯·汤普森和与丹尼斯·里奇。获奖理由是:“For their development of gener...
原文地址:http://blog.csdn.net/a19881029/article/details/51824790Linux Distribution:Ubuntu 14一,Nginx的安装首先从Nginx的官网下载最新的稳定版本1.10.1,下载地址如下http://nginx.org/en/download.html[p
本文以填报报表为例,通过分页的方式,来解决大数据集展示的问题。实现的思想就是通过在SQL里筛选部分数据库数据,以达到浏览器可以合理的展示报表页面。(数据分段,语句我这采用的是MYSQL,如果要用其他数据库,请查看FineReport帮助文档)步骤一:打开fenye.cpt文件。模板界面如下 两个ds,和一部分数据,及隐藏的一行。 隐藏一行内容如下 这里数据的功...
这一题的话我们可以把映像字符的内容给放入一个字符串常量里面,然后开辟一个二维的字符串常量数组,里面放置答案。对于回文实际上是很好求的,对于镜像的话,我们写一个返回char的函数,让它接收一个char。接收之后进行判断,如果它是字母的话,我们就返回它减去'A'这个字母,得到的整数下标对应的镜像字符串中的字母。如果不是,我们就返回它减去字符0,得...
git:‘instaweb’ 不是一个 git 命令。参见 ‘git --help’。当centos输入:# git instaweb --start出现:git:‘instaweb’ 不是一个 git 命令。参见 ‘git --help’。则只需要输入:# yum install git-instaweb安装git-instaweb包即可。再重新启动# git instaweb -...