PS:双向链表(每个节点含有指向前一个节点的前驱与后一个节点的后继)

public class DoublyLinkedList {
static class Node {
private Object data;
private Node prev; public Node getPrev() {
return prev;
} public void setPrev(Node prev) {
this.prev = prev;
} private Node next; public Node(Object value) {
this.data = value;
} public Object getData() {
return data;
} public void setData(Object data) {
this.data = data;
} public Node getNext() {
return next;
} public void setNext(Node next) {
this.next = next;
} @Override
public String toString() {
return String.valueOf(data);
}
} private Node head;// 头节点 public DoublyLinkedList() {
head = new Node(null);
} // 双向链表表头插入节点
public void addFirst(Object value) {
Node node = new Node(value);
if (head.next == null) {
head.next = node;
node.prev = head;
} else {
node.prev = head;
node.next = head.next;
head.next.prev = node;
head.next = node;
}
// head=node;
} // 删除表头
public void removeFirst() {
Node node = head.next;
if (node.next != null) {
node.next.prev = head;
head.next = node.next;
}
} // 顺序打印链表
public void printList() {
Node node = head.next;
while (node != null) {
System.out.print(node.data + " ");
node = node.next;
}
System.out.println();
} // 逆序打印链表
public void reversePrintList() {
Node node = head.next;
Node tail = null;
while (node.next != null) {
node = node.next;
}
tail = node;
// System.out.println(tail.data);
while (tail.prev != null) {
System.out.print(tail.data + " ");
tail = tail.prev;
}
System.out.println();
} public static void main(String[] args) {
DoublyLinkedList linkedList = new DoublyLinkedList();
for (int i = 0; i < 10; i++) {
linkedList.addFirst(i);
}
System.out.println("顺序打印链表");
linkedList.printList();
System.out.println("逆序打印链表");
linkedList.reversePrintList();
System.out.println("依次删除头结点");
for (int i = 0; i < 10; i++) {
linkedList.removeFirst();
linkedList.printList();
} }
}

  

java实现双向链表的更多相关文章

  1. JAVA实现双向链表的增删功能

    JAVA实现双向链表的增删功能,完整代码 package linked; class LinkedTable{ } public class LinkedTableTest { //构造单链表 sta ...

  2. Java简单双向链表实现 @version 1.0

    package com.list; /** * 数据结构和算法Java表示 双向链表 * * @version 1.0 * @author 小明 * */ public class MyDoublel ...

  3. JAVA单向/双向链表的实现

    一.JAVA单向链表的操作(增加节点.查找节点.删除节点) class Link { // 链表类 class Node { // 保存每一个节点,此处为了方便直接定义成内部类 private Str ...

  4. 大话数据结构(八)Java程序——双向链表的实现

    线性链表--双向链表 双向链表定义: 双向链表(double linked list): 是在单表单的每个结点中,再设置一个指向前驱结点的指针域.因此,在双向链表中的结点都有两个指针域,一个指向前驱, ...

  5. Java中双向链表的代码实现

    写在前面: 双向链表是一种对称结构,它克服了单链表上指针单向性的缺点,其中每一个节点即可向前引用,也可向后引用,这样可以更方便的插入.删除数据元素. 由于双向链表需要同时维护两个方向的指针,因此添加节 ...

  6. Java数据结构--双向链表的实现

    #java学习经验总结------双向链表的实现 双向链表的建立与单链表类似,只是需要使用pre指针指向前一个结点,并且在删除添加时不仅仅考虑next package datastructure; p ...

  7. Java数据结构——双向链表

    //================================================= // File Name : DoublyLinked_demo //------------- ...

  8. Java:双向链表反转实现

    有个小需求要求实现一个双向链表的反转于是就有了下边代码: 链表元素结构定义: package com.util; public class LinkedNode<T>{ private T ...

  9. java中双向链表的增、删、查操作

    import java.util.NoSuchElementException; public class DoublyLinkedListImpl<E> { private Node h ...

随机推荐

  1. 解密随机数生成器(二)——从java源码看线性同余算法

    Random Java中的Random类生成的是伪随机数,使用的是48-bit的种子,然后调用一个linear congruential formula线性同余方程(Donald Knuth的编程艺术 ...

  2. C语言的一个关键字——static

      Static在C语言里面有两个作用,第一个是修饰变量,第二个是修饰函数. 1.Static修饰变量 按照作用范围的不同,变量分为局部变量和全局变量.如果用static修饰变量,不论这个变量是全局的 ...

  3. 【李婶小教程】(SE_lab3)

    额,今天说一下这个SE_lab3那几个东西都是怎么装的. 啊--其实技术含量貌似不是很高的. 1.先说最简单的一个叫做:Findbugs 点这个Eclipse Marketplace,这是一个神奇的东 ...

  4. Spark-用户应用程序入门

    /* 2 Spark Standalone模式下的Application Application是Spark中类似于Hadoop的Job的用户提交的应用.sc是Spark集群初始化时创建的SparkC ...

  5. Apache Hadoop最佳实践和反模式

    摘要:本文介绍了在Apache Hadoop上运行应用程序的最佳实践,实际上,我们引入了网格模式(Grid Pattern)的概念,它和设计模式类似,它代表运行在网格(Grid)上的应用程序的可复用解 ...

  6. 【Ruby on Rails学习二】在线学习资料的整理

    由于工作任务重,时间紧,没有太多学习的时间,大致找了些在线学习资料,这里做个整理,希望对同样准备学习的朋友有帮助 在线文档类: Ruby on Rails 实战圣经  使用 Rails 4.2 及 R ...

  7. JavaScript 原型与原型链

    __proto__ 用来获取和设置对象原型,但它是非标准的.__proto__前后的双下划线,说明它本质上是一个内部属性,而不是一个正式的对外的API,只是由于浏览器广泛支持,才被加入了ES6.标准明 ...

  8. linux下解压压缩rar文件

    http://download.csdn.net/detail/hnust_xiehonghao/6679893   下载地址 1. 下载软件 以rarlinux-3.8.0 for linux为例, ...

  9. 尝鲜党:Nexus5、6刷安卓M教程

    说明: 进入recovery的命令:adb reboot recovery 进入bootloader的命令:adb reboot bootloader 概述 F:\Nexus5\AndroidM\ha ...

  10. eclipse中svn插件的安装与使用

    eclipse中svn插件的安装与使用 一.    eclipse中svn插件的安装 eclipse里安装SVN插件,一般来说,有两种方式: 直接下载SVN插件,将其解压到eclipse的对应目录里 ...