`
韩悠悠
  • 浏览: 839835 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

双端链表的java实现

 
阅读更多

 * 双端链表,
 * 一、什么是双链表
 * 链表中保存着对最后一个链接点引用的链表
 * 二、从头部进行插入
 * 要对链表进行判断,如果为空则设置尾结点为新添加的结点
 * 三、从尾部进行插入
 * 如果链表为空,则直接设置头结点为新添加的结点,否则设置尾结点的后一个结点为新添加结点
 * 四、从头部进行删除
 * 判断头部结点是否有下一个结点,如果没有则设置结点为null

 

package com.algorithm;

/**
 * 双端链表,
 * 一、什么是双链表
 * 链表中保存着对最后一个链接点引用的链表
 * 二、从头部进行插入
 * 要对链表进行判断,如果为空则设置尾结点为新添加的结点
 * 三、从尾部进行插入
 * 如果链表为空,则直接设置头结点为新添加的结点,否则设置尾结点的后一个结点为新添加结点
 * 四、从头部进行删除
 * 判断头部结点是否有下一个结点,如果没有则设置结点为null
 * @author lenovo
 */
public class FirstLastLinkList {

	/**
	 * 头结点,相当于火车头
	 */
	private Node first;
	
	/**
	 * 尾结点
	 */
	private Node last;
	
	public FirstLastLinkList(){
		first =null;
		last=null;
	}
	
	/**
	 * 插入一个结点,在头结点插入
	 */
	public void insertFirst(long value){
		Node node = new Node(value);
		//要对链表进行判断,如果为空则设置尾结点为新添加的结点
		if(isEmpty()){
			last=node;
		}
		node.next = first;
		first =node;
	}
	
	/**
	 * 插入一个结点,在尾结点插入
	 */
	public void insertLast(long value){
		Node node = new Node(value);
		//如果链表为空,则直接设置头结点为新添加的结点,否则设置尾结点的后一个结点为新添加结点
		if(isEmpty()){
			first=node;
		}else{
			last.next = node;
		}
		
		last =node;
	}
	
	/**
	 * 删除一个结点,在头结点删除
	 */
	public Node deleteFirst(){
		Node node = first;
		//判断头部结点是否有下一个结点,如果没有则设置结点为null
		if(first.next==null){
			last=null;
		}
		first=node.next;
		return node;
	}
	
	/**
	 * 显示方法
	 */
	public void display(){
		Node current = first;
		
		while(current!=null){
			current.display();
			current = current.next;
		}
		System.out.println();
	}
	
	/**
	 * 查找方法
	 * @param value
	 * @return
	 */
	public Node find(long value){
		Node current = first;
		while(current.data!=value){
			if(current.next==null){
				return null;
			}
			current = current.next;
		}
		return current;
	}
	
	/**
	 * 删除方法,根据数据域删除
	 * @param value
	 * @return
	 */
	public Node delete(long value){
		Node current = first;
		Node previous =first; //当前元素
		while(current.data!=value){
			if(current.next==null){
				return null;
			}
			previous=current;
			current = current.next;
			
		}
		if(current == first) {
			first = first.next;
		} else {
			previous.next = current.next;
		}
		return current;
	}
	
	/**
	 * 判断是否为空
	 * @return
	 */
	public boolean isEmpty(){
		return first==null;
	}
	
	public static void main(String[] args) {
		FirstLastLinkList linkList = new FirstLastLinkList();
		/*linkList.insertFirst(34);
		linkList.insertFirst(56);
		linkList.insertFirst(67);
		linkList.display();
		
		linkList.deleteFirst();
		linkList.deleteFirst();
		linkList.display();
		
		Node node = linkList.find(34);
		node.display();*/
		
		linkList.insertLast(56);
		linkList.insertLast(90);
		linkList.insertLast(12);
		linkList.display();
		linkList.deleteFirst();
		linkList.display();
	}
}

 

 

分享到:
评论

相关推荐

    双端链表和双向链表Java代码

    本主题主要关注两种特殊类型的链表——双端链表(Double-ended LinkedList)和双向链表(Bidirectional LinkedList),并以Java语言实现为例进行讲解。 双端链表,也称为双链表,是一种允许在链表的两端进行插入和...

    java双端队列的实现-Java实现自定义双端队列(链表和数组两种方式) 数组和链表.pdf

    在 Java 中,LinkedList 的内部使用双端链表队列原理实现,而 ArrayList 的内部使用双端数组队列原理实现。 Java 实现自定义双端队列可以通过链表和数组两种方式实现,双端队列可以充当单端队列,也可以用于充当栈...

    Java模拟单链表和双端链表数据结构的实例讲解

    总结起来,Java中的单链表和双端链表都是重要的数据结构,它们在内存中非连续存储数据,通过节点间的引用关系维持逻辑顺序。单链表只支持从前往后的遍历,而双端链表则允许双向遍历,提供更灵活的操作。在实际应用中...

    基于双向链表的基数排序

    基数排序(radix sort)又称桶排序(bucket sort),相对于常见的比较排序,基数排序是一种分配式排序,需要将关键字...为了尽可能少的消耗复制时占用的空间,桶的数据结构选择链表,为了构造队列,选择使用双向列表。

    Java数据结构之双端链表原理与实现方法

    Java数据结构之双端链表原理与实现方法 Java数据结构中,双端链表是一种常用的数据结构,它可以实现链表的插入、删除、遍历等操作。双端链表的特点是,它有两个指针,一个指向链表的头节点,另一个指向链表的尾节点...

    java 数据结构 链表

    链表是一种基础且重要的数据结构,它在计算机科学和编程,尤其...理解链表的工作原理以及如何在Java中实现和使用链表,是每个Java开发者必备的基础技能。通过深入学习和实践,我们可以利用链表来解决各种实际编程挑战。

    Java基于双向链表实现双端队列结构(算法源码)

    * 基于双向链表实现双端队列结构 */ package dsa; public class Deque_DLNode implements Deque { protected DLNode header;//指向头节点(哨兵) protected DLNode trailer;//指向尾节点(哨兵) protected ...

    java链表 个人总结

    本文将结合个人学习心得,深入探讨Java链表的核心概念、实现方式以及与其他编程语言的互通性。 首先,链表是一种线性数据结构,与数组不同,它的元素在内存中不是连续存储的。每个元素(称为节点)包含两部分:数据...

    基于双向链表实现双端队列结构算法(java算法源码)

    * 基于双向链表实现双端队列结构 */ package dsa; public class Deque_DLNode implements Deque { protected DLNode header;//指向头节点(哨兵) protected DLNode trailer;//指向尾节点(哨兵) protected ...

    链表(Java)

    首先,Java提供了两种内置的链表实现:`LinkedList`类(位于`java.util`包中)和`ArrayList`接口(实现了`List`接口)。在这里,我们主要关注`LinkedList`,因为它是真正意义上的链表数据结构。 **1. LinkedList类*...

    java实现数据结构

    Java的`ArrayDeque`类是一种高效的双端队列实现,支持在两端进行插入和删除操作。`offer()`用于在队尾添加元素,`poll()`从队头移除并返回元素,`peek()`查看队头元素但不移除,`isEmpty()`则用于检查队列是否为空。...

    数据结构与算法(java)

    - **队列**:可以用数组或双端链表实现,支持`enqueue`和`dequeue`操作。 **优点:** - **封装性:** 用户不需要关心内部实现,只需调用预定义的方法即可。 - **复用性:** 同一 ADT 可用于多种不同的应用场景。 - ...

    能直接用的链表

    队列则可以使用双端链表,允许在两端进行入队和出队操作。 链表的性能特点需要注意,由于元素不是连续存储,随机访问(如通过索引访问)效率较低,通常需要O(n)的时间复杂度。但在插入和删除操作上,链表通常比数组...

    数组的扩容和链表结构.zip

    对于链表,我们可以利用双端链表(如Java的Deque接口)来提供更多的操作可能性,比如在两端插入和删除元素。 总之,理解并掌握Java数组的扩容机制和链表结构,是提升Java编程技能的关键一步。通过合理选择和优化...

    Java版数据结构与算法视频教程(20集版),附源码资料

    第05讲 - 双端链表和双向链表.avi 第06讲 - 递归的应用 第07讲 - 递归的高级应用 第08讲 - 希尔排序 第09讲 - 快速排序 第10讲 - 二叉树的基本概念 第11讲 - 二叉树的基本操作 第12讲 - 遍历二叉树 第13讲 ...

    Java版数据结构与算法视频教程(20集版),附源码资料

    第05讲 - 双端链表和双向链表.avi 第06讲 - 递归的应用 第07讲 - 递归的高级应用 第08讲 - 希尔排序 第09讲 - 快速排序 第10讲 - 二叉树的基本概念 第11讲 - 二叉树的基本操作 第12讲 - 遍历二叉树 第13讲 ...

    JAVA链表的介绍(包含单项链表、双向链表)、LinkedList 与 ArrayList 比较、链表的基本操作、基本方法等

    - `LinkedList`继承自`AbstractSequentialList`类,实现了`List`、`Queue`、`Deque`等接口,因此可以作为队列或双端队列使用。 - 支持克隆(`Cloneable`)和序列化(`Serializable`)。 - 位于`java.util`包中。 #### ...

    java数据结构

    第05讲 - 双端链表和双向链表.avi 第06讲 - 递归的应用 第07讲 - 递归的高级应用 第08讲 - 希尔排序 第09讲 - 快速排序 第10讲 - 二叉树的基本概念 第11讲 - 二叉树的基本操作 第12讲 - 遍历二叉树 第13讲 ...

    用Java实现数据结构中的队列

    本篇文章将深入探讨如何用Java语言来实现这种基本的数据结构。 1. **队列的基本操作** - **enqueue()**: 将元素添加到队列的尾部。这是队列的插入操作。 - **dequeue()**: 移除并返回队列的头部元素。这是队列的...

Global site tag (gtag.js) - Google Analytics