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. WIN7下关闭驱动数字签名检查的方法

    内容是转的,最后一步貌似没什么用处,水印是去不掉的,不过也无所谓,关键是驱动能用了,要不完全瞎了 实测win7 32位旗舰版可用   ================================= ...

  2. buffer busy wait

    什么是buffer busy wait? A session that reads or modifies a buffer in the SGA must first acquire the cac ...

  3. 总结:man, info, hwclock, cal, type, which, dirname, basename, who, which, whatis, makewhatis, hash, tty

    man, info, help, date, hwclock, cal, shutdown, reboot, halt, poweroff, type, cd, which, dirname, bas ...

  4. hdu2444The Accomodation of Students

    思路: 二分图判断+最大匹配模板 二分图判断的方法很好想,没有离散的基础凭空给你个图让你判断也很容易想到染色法,简单的介绍下就是用queue来做,标记一个点为x则他所有的邻点都为x',然后递归的执行下 ...

  5. 3DES加密算法

    在日常设计及开发中,为确保数据传输和数据存储的安全,可通过特定的算法,将数据明文加密成复杂的密文.目前主流加密手段大致可分为单向加密和双向加密. 单向加密:通过对数据进行摘要计算生成密文,密文不可逆推 ...

  6. wpf下拉框不能多选的原因

    <dxe:ComboBoxEdit Margin="0"  Height="25" Width="65" VerticalAlignm ...

  7. 在Ubuntu下构建Bullet以及执行Bullet的样例程序

    在Ubuntu下构建Bullet以及执行Bullet的样例程序 1.找到Bullet的下载页,地址是:https://code.google.com/p/bullet/downloads/list 2 ...

  8. Java基础知识强化51:经典排序之桶排序(BucketSort)

    1. 首先说明三点: (1)桶排序是稳定的 (2)桶排序是常见排序里最快的一种,比快排还要快…大多数情况下 (3)桶排序非常快,但是同时也非常耗空间,基本上是最耗空间的一种排序算法 2. 桶排序的分析 ...

  9. CVE-2015-8660分析

    0x00测试环境   使用环境 备注 操作系统 Ubuntu15.04 虚拟机 内核版本 3.19.0-15-generic 漏洞来源 /fs/overlayfs/inode.c Before 201 ...

  10. Python-字符串开头或结尾匹配

    startswith() 和 endswith() 方法提供了一个非常方便的方式去做字符串开头和结尾的检查. 1.查看指定目录下的所有文件名 >>> import os >&g ...