* 双端链表,
* 一、什么是双链表
* 链表中保存着对最后一个链接点引用的链表
* 二、从头部进行插入
* 要对链表进行判断,如果为空则设置尾结点为新添加的结点
* 三、从尾部进行插入
* 如果链表为空,则直接设置头结点为新添加的结点,否则设置尾结点的后一个结点为新添加结点
* 四、从头部进行删除
* 判断头部结点是否有下一个结点,如果没有则设置结点为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(); } }
相关推荐
本主题主要关注两种特殊类型的链表——双端链表(Double-ended LinkedList)和双向链表(Bidirectional LinkedList),并以Java语言实现为例进行讲解。 双端链表,也称为双链表,是一种允许在链表的两端进行插入和...
在 Java 中,LinkedList 的内部使用双端链表队列原理实现,而 ArrayList 的内部使用双端数组队列原理实现。 Java 实现自定义双端队列可以通过链表和数组两种方式实现,双端队列可以充当单端队列,也可以用于充当栈...
总结起来,Java中的单链表和双端链表都是重要的数据结构,它们在内存中非连续存储数据,通过节点间的引用关系维持逻辑顺序。单链表只支持从前往后的遍历,而双端链表则允许双向遍历,提供更灵活的操作。在实际应用中...
基数排序(radix sort)又称桶排序(bucket sort),相对于常见的比较排序,基数排序是一种分配式排序,需要将关键字...为了尽可能少的消耗复制时占用的空间,桶的数据结构选择链表,为了构造队列,选择使用双向列表。
Java数据结构之双端链表原理与实现方法 Java数据结构中,双端链表是一种常用的数据结构,它可以实现链表的插入、删除、遍历等操作。双端链表的特点是,它有两个指针,一个指向链表的头节点,另一个指向链表的尾节点...
链表是一种基础且重要的数据结构,它在计算机科学和编程,尤其...理解链表的工作原理以及如何在Java中实现和使用链表,是每个Java开发者必备的基础技能。通过深入学习和实践,我们可以利用链表来解决各种实际编程挑战。
* 基于双向链表实现双端队列结构 */ package dsa; public class Deque_DLNode implements Deque { protected DLNode header;//指向头节点(哨兵) protected DLNode trailer;//指向尾节点(哨兵) protected ...
本文将结合个人学习心得,深入探讨Java链表的核心概念、实现方式以及与其他编程语言的互通性。 首先,链表是一种线性数据结构,与数组不同,它的元素在内存中不是连续存储的。每个元素(称为节点)包含两部分:数据...
* 基于双向链表实现双端队列结构 */ package dsa; public class Deque_DLNode implements Deque { protected DLNode header;//指向头节点(哨兵) protected DLNode trailer;//指向尾节点(哨兵) protected ...
首先,Java提供了两种内置的链表实现:`LinkedList`类(位于`java.util`包中)和`ArrayList`接口(实现了`List`接口)。在这里,我们主要关注`LinkedList`,因为它是真正意义上的链表数据结构。 **1. LinkedList类*...
Java的`ArrayDeque`类是一种高效的双端队列实现,支持在两端进行插入和删除操作。`offer()`用于在队尾添加元素,`poll()`从队头移除并返回元素,`peek()`查看队头元素但不移除,`isEmpty()`则用于检查队列是否为空。...
- **队列**:可以用数组或双端链表实现,支持`enqueue`和`dequeue`操作。 **优点:** - **封装性:** 用户不需要关心内部实现,只需调用预定义的方法即可。 - **复用性:** 同一 ADT 可用于多种不同的应用场景。 - ...
队列则可以使用双端链表,允许在两端进行入队和出队操作。 链表的性能特点需要注意,由于元素不是连续存储,随机访问(如通过索引访问)效率较低,通常需要O(n)的时间复杂度。但在插入和删除操作上,链表通常比数组...
对于链表,我们可以利用双端链表(如Java的Deque接口)来提供更多的操作可能性,比如在两端插入和删除元素。 总之,理解并掌握Java数组的扩容机制和链表结构,是提升Java编程技能的关键一步。通过合理选择和优化...
第05讲 - 双端链表和双向链表.avi 第06讲 - 递归的应用 第07讲 - 递归的高级应用 第08讲 - 希尔排序 第09讲 - 快速排序 第10讲 - 二叉树的基本概念 第11讲 - 二叉树的基本操作 第12讲 - 遍历二叉树 第13讲 ...
第05讲 - 双端链表和双向链表.avi 第06讲 - 递归的应用 第07讲 - 递归的高级应用 第08讲 - 希尔排序 第09讲 - 快速排序 第10讲 - 二叉树的基本概念 第11讲 - 二叉树的基本操作 第12讲 - 遍历二叉树 第13讲 ...
- `LinkedList`继承自`AbstractSequentialList`类,实现了`List`、`Queue`、`Deque`等接口,因此可以作为队列或双端队列使用。 - 支持克隆(`Cloneable`)和序列化(`Serializable`)。 - 位于`java.util`包中。 #### ...
第05讲 - 双端链表和双向链表.avi 第06讲 - 递归的应用 第07讲 - 递归的高级应用 第08讲 - 希尔排序 第09讲 - 快速排序 第10讲 - 二叉树的基本概念 第11讲 - 二叉树的基本操作 第12讲 - 遍历二叉树 第13讲 ...
本篇文章将深入探讨如何用Java语言来实现这种基本的数据结构。 1. **队列的基本操作** - **enqueue()**: 将元素添加到队列的尾部。这是队列的插入操作。 - **dequeue()**: 移除并返回队列的头部元素。这是队列的...