Java实现单链表翻转
单链表翻转比方有例如以下链表:
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZmVuZ3NoaXp0eQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">
须要依照C B A 输出,我们能够有好几种方法:
package org.andy.test; import java.util.ArrayList;
import java.util.List; /**
* @author andy
* @version:2015-2-4 上午9:41:12
*
*
*/ public class LinkedReverse { /**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
N n = new N();
n.name = "A"; N n1 = new N();
n1.name = "B"; N n2 = new N();
n2.name = "C"; N n3 = new N();
n3.name = "D"; n1.nextN = n2;
n.nextN = n1;
n2.nextN = n3;
N old = n;
while (old != null) {
System.out.println(old.name);
old = old.nextN;
} System.out.println("链表翻转1");
N new1 = reverseOne(n);
while (new1 != null) {
System.out.println(new1.name);
new1 = new1.nextN;
} /*
System.out.println("链表翻转2");
N new2 = reverseTwo(n, null);
while (new2 != null) {
System.out.println(new2.name);
new2 = new2.nextN;
} System.out.println("链表翻转3");
N new3 = reverseThree(n);
while (new3 != null) {
System.out.println(new3.name);
new3 = new3.nextN;
} */
} //採用交换前后值
public static N reverseOne(N n) {
if (n != null) {
N preN = n; //前一个节点
N curN = n.nextN; //当前节点
N nextN ; //后一个节点
while (null != curN) {
nextN = curN.nextN;
curN.nextN = preN;
preN = curN;
curN = nextN;
} n.nextN = null;
n = preN; return n; }
return null;
} //採用递归实现
public static N reverseTwo(N n, N newN) {
// 採用递归 返回 返回条件是最后一个几点nextN为空
if (n == null) {
return newN;
} N nextN = n.nextN;
n.nextN = newN;
return reverseTwo(nextN, n);
} //最烂的实现方式
public static N reverseThree(N n) {
if (n == null) {
return null;
}
// 定义一个集合 。放在集合里面在单个反向指回
List<N> nList = new ArrayList<N>();
N p = n;
while (p != null) {
N node = new N();// 当前节点
node.name = p.name;
nList.add(node);
p = p.nextN;
} // 在返现输出节点
n = null;
for (N rn : nList) {
if (n != null) {
// 假设n不为空时
rn.nextN = n;
}
n = rn;
} return n;
} } // 定义一个节点
class N {
public String name;
public N nextN;
}
Java实现单链表翻转的更多相关文章
- Java实现单链表的各种操作
Java实现单链表的各种操作 主要内容:1.单链表的基本操作 2.删除重复数据 3.找到倒数第k个元素 4.实现链表的反转 5.从尾到头输出链表 6.找到中间节点 7.检测链表是否有环 8.在 ...
- java实现单链表的增删功能
JAVA 实现单链表的增删功能 package linked; class LinkedTable{ } public class LinkedTableTest { public static vo ...
- 用python介绍4种常用的单链表翻转的方法
这里给出了4种4种常用的单链表翻转的方法,分别是: 开辟辅助数组,新建表头反转,就地反转,递归反转 # -*- coding: utf-8 -*- ''' 链表逆序 ''' class ListNod ...
- JAVA数据结构——单链表
链表:一. 顺序存储结构虽然是一种很有用的存储结构,但是他有如下几点局限性:1. 因为创造线性表的时候已经固定了空间,所以当需要扩充空间时,就需要重新创建一个地址连续的更大的存储空间.并把原有的数据元 ...
- 使用java实现单链表(转载自:https://www.cnblogs.com/zhongyimeng/p/9945332.html)
使用java实现单链表----(java中的引用就是指针)转载自:https://www.cnblogs.com/zhongyimeng/p/9945332.html ? 1 2 3 4 5 6 7 ...
- 用Java实现单链表的基本操作
笔试题中经常遇到单链表的考题,下面用java总结一下单链表的基本操作,包括添加删除节点,以及链表转置. package mars; //单链表添加,删除节点 public class ListNode ...
- java实现单链表常见操作
一.概述: 本文主要总结单链表常见操作的实现,包括链表结点添加.删除:链表正向遍历和反向遍历.链表排序.判断链表是否有环.是否相交.获取某一结点等. 二.概念: 链表: 一种重要的数据结构,HashM ...
- Java实现单链表的快速排序和归并排序
本文描述了LeetCode 148题 sort-list 的解法. 题目描述如下: Sort a linked list in O(n log n) time using constant space ...
- 数据结构——Java实现单链表
一.分析 单链表是一种链式存取的数据结构,用一组地址任意的存储单元存放线性表中的数据元素.链表中的数据是以结点来表示的,每个结点由元素和指针构成.在Java中,我们可以将单链表定义成一个类,单链表的基 ...
随机推荐
- C#和JAVA的RSA密钥、公钥转换
C#的秘钥跟JAVA的密钥区别 RSA对于程序本身是没有区别的,其格式都是相同的.对于不同的程序来说,存储使用的语法(包装的类)会有所不同. RSA语法和语法标准有很多,大的类型大概分为ASN.1 ...
- 关于继承中的super()调用父类构造方法
super super可以理解为是指向自己超(父)类对象的一个指针,而这个超类指的是离自己最近的一个父类. 每当你new一个子类对象的时候,子类对象都隐式内置了一个父类对象.所以说,为了那个内置的父类 ...
- 关于Java中子类调用父类方法
当一个类继承于另一个类,子类中没有父类的方法时.用子类的对象调用方法时,会首先在子类中查找,如果子类中没有改方法,再到父类中查找. 当一个方法只在父类中定义时,调用该方法时会使用父类中的属性. 如果该 ...
- centos6.5官方dvd做本地yum
问题描述: 一切都搞定了,就是yum makecache 出现文件404,再目录看了也不对没后缀...(这不扯淡吗,rhel的dvd是可以直接使用的,难道企业版与社区版的区别??) 日志记录 [roo ...
- Oracle死锁导致的tomcat抛损坏的管道异常
今天遇到个问题,就是由于清空数据库的数据,设备采集客户端一直在往服务器上发采集回来的数据,但是由于某种原因,数据库的某语句死锁了. 数据库的死锁语句是通过这个SQL查出来的:select sql_te ...
- spring 2种下载方式 下载地址 download 地址
spring 在官网只提供 maven 的下载方式,把zip方式的不再提供,两种方法下载: 1.想找回以前版本的spring zip包,如果知道版本号,那么直接在google里输入 ” spring ...
- 用UltraEdit判断打开文件的编码类型 用UltraEdit或notepad记事本查看文件编码格式 用UltraEdit查看当前文件编码
用UltraEdit查看当前文件编码 想判断文件的编码类型? 用强大的UltraEdit-32软件: UltraEdit-32的状态栏可以显示文件的编码类型,详细情况如下: ANSI/ANSCI--- ...
- 树莓派进阶之路 (029) - 语音识别模块 LD3320(原创)
近几天听朋友有说到LD3320 语音模块,刚好身边有块树莓派3,就在某宝上买了块自带mcu的LD3320 . 准备: 树莓派一个(配置了wiringPi开发环境的详情见本人博客:树莓派进阶之路 (00 ...
- 基于C/S模式的android手机与PC机通信系统的开发
原文链接: http://blog.csdn.net/nupt123456789/article/details/8213486 基于C/S模式的android手机与PC机通信系统的开发 作者:郑海波 ...
- Spring Boot修改内置Tomcat端口号
spring Boot 内置Tomcat默认端口号为8080,在开发多个应用调试时很不方便,本文介绍了修改 Spring Boot内置Tomcat端口号的方法. 一.EmbeddedServletCo ...