java实现双向链表
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实现双向链表的更多相关文章
- JAVA实现双向链表的增删功能
JAVA实现双向链表的增删功能,完整代码 package linked; class LinkedTable{ } public class LinkedTableTest { //构造单链表 sta ...
- Java简单双向链表实现 @version 1.0
package com.list; /** * 数据结构和算法Java表示 双向链表 * * @version 1.0 * @author 小明 * */ public class MyDoublel ...
- JAVA单向/双向链表的实现
一.JAVA单向链表的操作(增加节点.查找节点.删除节点) class Link { // 链表类 class Node { // 保存每一个节点,此处为了方便直接定义成内部类 private Str ...
- 大话数据结构(八)Java程序——双向链表的实现
线性链表--双向链表 双向链表定义: 双向链表(double linked list): 是在单表单的每个结点中,再设置一个指向前驱结点的指针域.因此,在双向链表中的结点都有两个指针域,一个指向前驱, ...
- Java中双向链表的代码实现
写在前面: 双向链表是一种对称结构,它克服了单链表上指针单向性的缺点,其中每一个节点即可向前引用,也可向后引用,这样可以更方便的插入.删除数据元素. 由于双向链表需要同时维护两个方向的指针,因此添加节 ...
- Java数据结构--双向链表的实现
#java学习经验总结------双向链表的实现 双向链表的建立与单链表类似,只是需要使用pre指针指向前一个结点,并且在删除添加时不仅仅考虑next package datastructure; p ...
- Java数据结构——双向链表
//================================================= // File Name : DoublyLinked_demo //------------- ...
- Java:双向链表反转实现
有个小需求要求实现一个双向链表的反转于是就有了下边代码: 链表元素结构定义: package com.util; public class LinkedNode<T>{ private T ...
- java中双向链表的增、删、查操作
import java.util.NoSuchElementException; public class DoublyLinkedListImpl<E> { private Node h ...
随机推荐
- log4jdbc
log4jdbc http://www.blogjava.net/badqiu/archive/2010/08/20/329464.html http://blog.csdn.net/sfdev/ar ...
- 【HDOJ】4515 小Q系列故事——世界上最遥远的距离
简单题目,先把时间都归到整年,然后再计算.同时为了防止减法出现xx月00日的情况,需要将d先多增加1,再恢复回来. #include <cstdio> #include <cstri ...
- Android中sharedPreference的简单使用
public class MainActivity extends Activity { public void onCreate(Bundle savedInstanceState) { super ...
- [LeetCode] 45. Jump Game II 解题思路
Given an array of non-negative integers, you are initially positioned at the first index of the arra ...
- uva 10859 - Placing Lampposts dp
题意: 有n个节点,m条边,无向无环图,求最少点覆盖,并且在同样点数下保证被覆盖两次的变最多 分析: 1.统一化目标,本题需要优化目标有两个,一个最小灯数a,一个最大双覆盖边数b,一大一小,应该归一成 ...
- c语言学习笔记(1)——c语言的特点
一.c语言概述 1.为什么学习c语言? (1)c的起源和发展 第一代语言:机器语言 1101 第二代语言:汇编语言 add ax,bx; 第三代语言:高级语言 a+b; 结构化:c fortra ...
- 翻译brent ozar的sqlserver dba训练课程——第一章:建立数据库服务器清单
在公司里,走进销售副总裁的办公室,询问他手下有多少销售人员.不,我的意思是你并不要那么做,他们会问你销售工具为什么那么慢. 其实我的意思是,如果你能走进他的办公室问他这个问题.我敢打赌,他会马上回答 ...
- html(三)
今天自己画了个安卓机器人,之前听徐大大讲过一次,查手册去动手的时候其实发觉不是很难,这种规则的图像还是很好画的,主要是用<div>标签和<span>标签去做的,通过CSS添加样 ...
- BootStrap--模态框中 上传图片
问题:在模态框中添加图片并不会得到你上传图片的名称,无法存到数据 下面介绍两个方法,都是可以得到图片名称的. 第一种 前面如何加载模态框就不写了,上篇有写,这里只是为得到图片写的 //需要添加一个 ...
- Android设备中实现Orientation Sensor(图)兼谈陀螺仪
设备中的三自由度Orientation Sensor就是一个可以识别设备相对于地面,绕x.y.z轴转动角度的感应器(自己的理解,不够严谨).智能手机,平板电脑有了它,可以实现很多好玩的应用,比如说指南 ...