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中,我们可以将单链表定义成一个类,单链表的基 ...
随机推荐
- 【DB2】监控动态SQL语句
一.db2监控动态SQL(快照监控) db2示例用户登陆后,使用脚本语句db2 get snapshot for all on dbname>snap.out 也可以使用db2 get snap ...
- 检测动态生成的单选按钮和jQuery的变化
我试图发现变化动态生成的单选按钮.我有一个生成的单选按钮的表单,他们根据自己的ID保存在数据库.所以这是什么 <input type="radio" name="d ...
- Android(4.0.3+): Service, AsyncTask, 定时任务和UI通信
Service使用AlarmManager实现后台定时任务 在Android 4.0.3版本中, 使用AlarmManager实现后台定时任务是比较好的方案, 其实现机制, 是利用Service的 o ...
- ELK 实现 Java 分布式系统日志分析架构
日志是分析线上问题的重要手段,通常我们会把日志输出到控制台或者本地文件中,排查问题时通过根据关键字搜索本地日志,但越来越多的公司,项目开发中采用分布式的架构,日志会记录到多个服务器或者文件中,分析问题 ...
- onActivityResult 传递数据
onActivityResult 传递数据 http://www.cnblogs.com/sipher/articles/2435078.html 如下图所示.当菜单项变多时,出现了垂直的滚动条,选项 ...
- 聚集函数查询结果为空, list的size是1, resolve
resultList.removeAll(Collections.singleton(null));
- 【RS】Using graded implicit feedback for bayesian personalized ranking - 使用分级隐式反馈来进行贝叶斯个性化排序
[论文标题]Using graded implicit feedback for bayesian personalized ranking (RecSys '14 recsys.ACM ) [论文 ...
- Python实现鸢尾花数据集分类问题——使用LogisticRegression分类器
. 逻辑回归 逻辑回归(Logistic Regression)是用于处理因变量为分类变量的回归问题,常见的是二分类或二项分布问题,也可以处理多分类问题,它实际上是属于一种分类方法. 概率p与因变量往 ...
- 树莓派进阶之路 (031) -字符问题(1) - GBK汉字编码表(转)
转载:http://blog.sina.com.cn/s/blog_8184e033010109ug.html 基本简介 GB码,全称是GB2312-80<信息交换用汉字编码字符集基本集&g ...
- Redis学习之路(000)- 目录
本文是博主学习整理网上大神的文件以及自学的心得. Redis学习之路(000)- 目录 Redis学习之路(001)- Redis介绍以及安装(Linux) Redis学习之路(002)- Ubunt ...