java双链表基本方法_Java数据结构之双端链表原理与实现方法

本文实例讲述了java数据结构之双端链表原理与实现方法。分享给大家供大家参考,具体如下:

一、概述:

1、什么时双端链表:

链表中保持这对最后一个连点引用的链表

2、从头部插入

要对链表进行判断,如果为空则设置尾节点为新添加的节点

3、从尾部进行插入

如果链表为空,则直接设置头节点为新添加的节点,否则设置尾节点的后一个节点为新添加的节点

4、从头部删除

判断节点是否有下个节点,如果没有则设置节点为null

二、具体实现

/**

* @描述 头尾相接的链表

* @项目名称 Java_DataStruct

* @包名 com.struct.linklist

* @类名 LinkList

* @author chenlin

* @date 2010年6月26日 上午8:00:28

* @version 1.0

*/

public class FirstLastLinkList {

//头

private Node first;

//尾

private Node last;

public FirstLastLinkList(){

first = null;

last = null;

}

/**

* 插入数据

* @param value

*/

public void insertFirst(long value){

Node newNode = new Node(value);

if (first == nwww.cppcns.com使用遍历,让current指向下一个, 所以position - 1的下个node就是要找的值

for (int i = 0; i < position - 1 ; i++)OLIEaxTEnp {

current = current.next;

}

return current;

}

public static void main(String[] args) {

FirstLastLinkList linkList = new FirstLastLinkList();

linkList.insertFirst(21);

linkList.insertFirst(22);

linkList.insertFirst(23);

linkList.insertLast(24);

linkList.insertLast(25);

linkList.insertLast(26);

linkList.insertLast(27);

linkList.display();

System.out.println("---查找-------------------------------------");

linkList.findByKey(25).display();

System.out.println("--删除first-------------------------------------");

//linkList.deleteFirst().display();

///linkList.deleteFirst().display();

//linkList.deleteFirst().display();

//linkList.deleteFirst().display();

System.out.println("-删除指定值---------------------------------------");

linkList.deleteByKey(27).display();

linkList.deleteByKey(21).display();

System.out.println("----------------------------------------");

linkList.display();

}

}

更多关于java算法相关内容感兴趣的读者可查看本站专题:《Java数据结构与算法教程》、《Java操作DOM节点技巧总结》、《Java文件与目录操作技巧汇总》和《Java缓存操作技巧汇总》

希望编程客栈本文所述对大家java程序设计有所帮助。

本文标题: Java数据结构之双端链表原理与实现方法

本文地址: http://www.cppcns.com/ruanjian/java/208052.html

/* * 基于双向链表实现双端队列结构 */ package dsa; public class Deque_DLNode implements Deque { protected DLNode header;//指向头节点(哨兵) protected DLNode trailer;//指向尾节点(哨兵) protected int size;//队列中元素的数目 //构造函数 public Deque_DLNode() { header = new DLNode(); trailer = new DLNode(); header.setNext(trailer); trailer.setPrev(header); size = 0; } //返回队列中元素数目 public int getSize() { return size; } //判断队列是否为空 public boolean isEmpty() { return (0 == size) ? true : false; } //取首元素(但不删除) public Object first() throws ExceptionQueueEmpty { if (isEmpty()) throw new ExceptionQueueEmpty("意外:双端队列为空"); return header.getNext().getElem(); } //取末元素(但不删除) public Object last() throws ExceptionQueueEmpty { if (isEmpty()) throw new ExceptionQueueEmpty("意外:双端队列为空"); return trailer.getPrev().getElem(); } //在队列前端插入新节点 public void insertFirst(Object obj) { DLNode second = header.getNext(); DLNode first = new DLNode(obj, header, second); second.setPrev(first); header.setNext(first); size++; } //在队列后端插入新节点 public void insertLast(Object obj) { DLNode second = trailer.getPrev(); DLNode first = new DLNode(obj, second, trailer); second.setNext(first); trailer.setPrev(first); size++; } //删除首节点 public Object removeFirst() throws ExceptionQueueEmpty { if (isEmpty()) throw new ExceptionQueueEmpty("意外:双端队列为空"); DLNode first = header.getNext(); DLNode second = first.getNext(); Object obj = first.getElem(); header.setNext(second); second.setPrev(header); size--; return(obj); } //删除末节点 public Object removeLast() throws ExceptionQueueEmpty { if (isEmpty()) throw new ExceptionQueueEmpty("意外:双端队列为空"); DLNode first = trailer.getPrev(); DLNode second = first.getPrev(); Object obj = first.getElem(); trailer.setPrev(second); second.setNext(trailer); size--; return(obj); } //遍历 public void Traversal() { DLNode p = header.getNext(); while (p != trailer) { System.out.print(p.getElem()+" "); p = p.getNex
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值