public class LinkedListTest {

    public static void main(String[] args) {
Node A = new Node("A");
Node B = new Node("B");
Node C = new Node("C");
Node D = new Node("D");
Node E = new Node("E");
Node F = new Node("F");
A.next = B;
B.next = C;
C.next = D;
D.next = E;
E.next = F;
print(A); LinkedListReversor reversor = LinkedListReversor.RECURSION;
System.out.println(reversor.getStrategy() + ":");
Node tmp = reversor.execute(A);
print(tmp); reversor = LinkedListReversor.NO_RECURSION;
System.out.println(reversor.getStrategy() + ":");
print(reversor.execute(tmp));
} private static void print(Node node) {
while (node != null) {
System.out.print(node.value);
node = node.next;
if (node != null) {
System.out.print("->");
} else {
System.out.println();
}
}
} } class Node {
public String value;
public Node next; public Node(String value) {
this.value = value;
}
} enum LinkedListReversor {
RECURSION("递归") {
@Override
public Node execute(Node node) {
Node prev = null;
if (node == null || node.next == null) {
prev = node;
} else {
Node tmp = execute(node.next);
node.next.next = node;
node.next = null;
prev = tmp;
}
return prev;
}
},
NO_RECURSION("非递归") {
@Override
public Node execute(Node node) {
Node prev = null;
while (node != null) {
Node tmp = node;
node = node.next;
tmp.next = prev;
prev = tmp;
}
return prev;
}
};
private String strategy; private LinkedListReversor(String strategy) {
this.strategy = strategy;
} public abstract Node execute(Node node); public String getStrategy() {
return strategy;
}
}

2. 实现思路

  • 递归:从尾部开始处理

  • 非递归:从头部开始处理

Java实现单向链表反转的更多相关文章

  1. C++ 单向链表反转

    单向链表反转,一道常见的面试题,动手实现下. #include "stdafx.h" #include <stdlib.h> struct Node{ int data ...

  2. Java实现单向链表基本功能

    一.前言 最近在回顾数据结构与算法,有部分的算法题用到了栈的思想,说起栈又不得不说链表了.数组和链表都是线性存储结构的基础,栈和队列都是线性存储结构的应用- 本文主要讲解单链表的基础知识点,做一个简单 ...

  3. 数据结构——Java实现单向链表

    结点类: /** * @author zhengbinMac * 一个OnelinkNode类的对象只表示链表中的一个结点,通过成员变量next的自引用方式实现线性表中各数据元素的逻辑关系. */ p ...

  4. 【Java数据结构】Java数据结构之链表反转

    我们都知道用C可以很简单的实现单链表反转,今天来学习下,在Java中如何实现链表反转. 思路很简单,定义一个类,这个类分成2块,一块是表示自身的标志,另外一个存储指向下一个元素的引用.通过互换相邻两个 ...

  5. Java实现单链表反转操作

    单链表是一种常见的数据结构,由一个个节点通过指针方式连接而成,每个节点由两部分组成:一是数据域,用于存储节点数据.二是指针域,用于存储下一个节点的地址.在Java中定义如下: public class ...

  6. php 单向链表反转 reverse (没有空的头结点)

    * 参照php标准库设计接口 http://php.net/manual/en/class.spldoublylinkedlist.php * 反转单向链表 reverse方法, 其他的方法为了方便测 ...

  7. java实现单链表反转

    一.简介 经查阅,主要有两种方法实现链表反转,递归反转法和遍历反转法: 递归: 在反转当前结点之前先反转其后边的结点,即.从尾结点开始逆向反转各个节点的指针域指向: 遍历:从前往后反转各个结点的指针域 ...

  8. java实现单链表反转(倒置)

    据说单链表反转问题面试中经常问,而链表这个东西相对于数组的确稍微难想象,因此今天纪录一下单链表反转的代码. 1,先定义一个节点类. 1 public class Node { 2 int index; ...

  9. java实现单向链表的增、删、改、查

    单向链表 作者:vashon package com.ywx.link; /** * 单向链表 * @author vashon * */ public class LinkTest { public ...

随机推荐

  1. 好用的Markdown编辑器汇总

    Markdown 是一种简单的.轻量级的标记语法.用户可以使用诸如 * # 等简单的标记符号以最小的输入代价生成极富表现力的文档. Markdown具有很多优点: 写作中添加简单符号即完成排版,所见即 ...

  2. 修正uboot网络不可用

    通过使用uboot的网络功能可以更新ubook,烧写内核,文件系统,如果网络功能不可能,那还不如同变砖了一样.当然如果支持sd卡启动,可能通过sd卡完成这些功能,但是也太过麻烦了.飞凌的6410开发板 ...

  3. Android常见Crash类型分析(一)

    问题1.   java.lang.IllegalStateException: The specified child already has a parent. You must call remo ...

  4. 【mongodb系统学习之十一】mongodb删除数据

    十一.mongodb删除数据: 1).删除全部文档:remove,语法db.collectionName.remove({}):小括号里边必须要有条件,否则不成功:如果只是一个空的{},则会删除集合内 ...

  5. tcp为什么要三次握手,而不能二次握手?

    谢希仁版<计算机网络>中的例子是这样的,"已失效的连接请求报文段"的产生在这样一种情况下:client发出的第一个连接请求报文段并没有丢失,而是在某个网络结点长时间的滞 ...

  6. Linux 显示权限

    Linux 显示权限 youhaidong@youhaidong-ThinkPad-Edge-E545:~$ ls -lh 总用量 56K -rw-r--r-- 1 youhaidong youhai ...

  7. touch.js下载使用方式

    touch.js下载地址 https://gitee.com/mirrors/touch-js Touch 在开发移动端的应用中会使用到很多的手势操作,例如一指拖动.两指旋转等等,为了方便开放者快速集 ...

  8. 原生态的ajax代码

    <script type="text/javascript"> var xmlhttprequest; function GetXmlHttpRequest() { i ...

  9. input 和button的区别

    一,区别一 先来看一个问题 <input type="button" class="btn-upload bg-org-code" name=" ...

  10. 【转载】Apache Spark Jobs 性能调优(二)

    调试资源分配   Spark 的用户邮件邮件列表中经常会出现 "我有一个500个节点的集群,为什么但是我的应用一次只有两个 task 在执行",鉴于 Spark 控制资源使用的参数 ...