`

使用java实现双向链表数据结构

阅读更多

今天到xxxx公司面试,前面的一些题目都是网上的一些面试题,最后一题考察的是数据结构,让介绍大学里学习的数据结构,并用代码实现链表的增加,删除,查询。这个之前在写练习时,写过链表的Demo,但是在这个关键时刻却忘了,不知道该怎么写,回来之后翻开之前写的代码重新看了一遍,在这里,我把我之前写的代码粘贴出来,供大家学习,希望大家能有所收获:

package link;

public class Link {
	
	/**
	 * 保存每一个节点,此处为了方便直接定义成内部类 
	 * @author binchen
	 *
	 */
	class Node{
		private String data;
		private Node next; //保存下一个节点
		
		public Node(){}
		public Node(String data){
			this.data = data; //通过构造方法设置节点内容
		}
		public String getData() {
			return data;
		}
		public void setData(String data) {
			this.data = data;
		}
		public Node getNext() {
			return next;
		}
		public void setNext(Node next) {
			this.next = next;
		}
		
		/**
		 * 输出节点内容
		 */
		public void print(){
			System.out.println(this.data + "\t");
			if(this.next != null){
				this.next.print();
			}
		}
		
		/**
		 * 	添加节点内容
		 * @param newNode
		 */
		public void add(Node newNode){ //将节点加入到合适的位置
			if(this.next == null){
				this.next = newNode;
			}else{ //如果不为空,则需要向下继续找next
				this.next.add(newNode);
			}
	 	}
		
		/**
		 * 查找节点
		 * @param data
		 * @return
		 */
		public boolean search(String data){ //内部搜索的方法
			if(this.data.equals(data)){
				return true;
			}else{ //向下继续判断
				if(this.next != null){ //如果不等于null,就继续向下查找下去
					return this.next.search(data);
				}
				return false;
			}
		}
		
		/**
		 * 删除节点
		 * @param data
		 */
		public void deleteNode(Node previous , String name){
			if(name.equals(this.data)){
				previous.next = this.next;
			}else{
				if(this.next != null){
					this.next.deleteNode(this, name);
				}
			}
		}
	};
	
	
	
	private Node root; //链表中必然存在一个根节点
	public void setRoot(Node root){
		this.root = root;
	}
	public Node getRoot(){
		return this.root;
	}
	
	/**
	 * 添加节点内容
	 * @param data
	 */
	public void addNode(String data){ //增加节点
		Node newNode = new Node(data); //定义新的节点
		if(this.root == null){ //判断根节点是否存在,如果不存在就将第一个节点设置成根节点
			this.root = newNode; //将第一个节点设置成根节点
		}else{ //不过如果存在,【不是根节点】,放到最后一个节点之后
			this.root.add(newNode);
		}
	}
	
	/**
	 * 输出全部的节点内容
	 */
	public void printNode(){
		if(this.root != null){ //如果根元素不为空
			this.root.print(); //调用节点类中的输出操作
		}
	}
	
	/**
	 * 查找节点
	 * @param name
	 * @return
	 */
	public boolean contains(String name){
		return this.root.search(name); //调用node类中的查找方法
	}
	
	/**
	 * 删除节点
	 * @param name
	 */
	public void deleteNode(String data){
		if(this.contains(data)){ //判断节点是否存在
			//一定要判断此元素现在是不是与根元素相等
			if(this.root.data.equals(data)){ //内容是根节点
				this.root = this.root.next;  //修改根节点,将第一个节点设置成根节点
			}else{
				this.root.next.deleteNode(root,data);
			}
		}
	}
}
 
分享到:
评论

相关推荐

    Java实现双向链表

    用Java定义一个双向链表,实现链表的基本操作: 初始化、获取头结点、添加新元素、删除链表元素、 获取链表元素、查找链表元素、更新链表中某个元素、 判断链表是否为空、求链表元素个数、输出链表元素、清空链表。

    java 单链表和双向链表的实现

    本话题主要探讨两种常用的数据结构——单链表和双向链表在Java中的实现,以及相关的操作,如在头部添加节点、在尾部添加节点、遍历、逆置和删除。 首先,我们来理解单链表和双向链表的基本概念。单链表是一种线性...

    JAVA双向链表反转实现

    在Java编程中,双向链表(Double Linked List)是一种数据结构,它允许我们在列表的任一侧进行插入和删除操作。与单向链表不同,双向链表中的每个节点都有两个指针,一个指向前一个节点,另一个指向后一个节点。这...

    自行使用Java数组实现链表数据结构

    本篇文章将深入探讨如何使用Java数组来模拟实现链表数据结构,以此来增强对链表理解的同时,也能看到数组在特殊场景下的运用。 链表是由一系列节点(或称为元素)组成的线性数据结构,每个节点包含数据和指向下一个...

    java 数据结构 链表

    链表是一种基础且重要的数据结构,它在计算机科学和编程,尤其是Java中有着广泛的应用。与数组不同,链表中的元素并不在内存中连续存储,而是通过节点间的引用(或称为指针)来连接。每个节点包含两部分:数据域,...

    java数据结构之实现双向链表的示例

    在Java中,双向链表是一种重要的数据结构,它允许在链表中的元素之间进行前后双向导航。本示例将详细介绍如何在Java中实现一个简单的双向链表,并提供相关的操作方法。 双向链表由一系列节点组成,每个节点包含三个...

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

    在Java中,理解和实现双端链表和双向链表对于提升数据结构和算法能力至关重要,它们在很多实际场景中都有应用,如在集合框架(如LinkedList)、缓存系统、以及需要频繁进行插入和删除操作的场合。理解这两种链表的...

    Java有序非循环双向链表算法实例

    在Java编程中,有序非循环双向链表是一种重要的数据结构,它在许多复杂的数据操作和算法实现中扮演着核心角色。有序意味着链表中的元素按照特定的顺序排列,非循环则表示链表的首节点和尾节点之间没有链接,使得遍历...

    试析用Java实现链表数据结构.pdf

    标题“试析用Java实现链表数据结构.pdf”所揭示的知识点涵盖了Java编程语言在内存管理和链表数据结构实现方面的深入探讨。描述中提到的“#资源达人分享计划#”可能意味着这篇文章是作为知识分享的一部分,而标签...

    doublelink.zip_DoubleLink java_双向链表实现

    在本文中,我们将深入探讨如何使用Java编程语言实现一个高效的双向链表数据结构,并通过测试用例进行验证。首先,让我们了解双向链表的基本概念。 双向链表是一种线性数据结构,其中每个节点包含两个指针,分别指向...

    Java双向链表的实现

    下面我们将详细讲解如何实现一个自定义的Java双向链表,并参考提供的`LinkNode.java`文件来理解其内部机制。 首先,我们需要定义一个表示链表节点的类`LinkNode`。这个类通常包含三个属性:存储数据的`data`字段、...

    单链表双向链表java实现

    在这个话题中,我们将深入探讨两种基本的线性数据结构——单链表和双向链表,并通过Java语言来实现它们。 单链表是一种线性数据结构,其中每个元素(称为节点)包含两个部分:数据域和指针域。数据域存储实际的数据...

    使用Java实现无头双向链表

    无头双向链表是一种链表数据结构,其中每个节点不仅包含指向下一个节点的指针(`next`),还包含指向前一个节点的指针(`prev`)。这种结构使得链表在某些操作上更加高效,例如在链表中间插入或删除节点。 以下是对...

    Java算法实例-双向链表操作

    本实例聚焦于Java中的一个重要数据结构——双向链表,它在很多场景下都有着广泛的应用。双向链表与单链表相比,其独特之处在于每个节点不仅包含指向下一个节点的指针,还包含指向前一个节点的指针,这使得在链表中的...

    Java LinkedList 双向链表实现原理

    相信大家都明白 LinkedList 是基于双向链表而实现的,本篇文章主要讲解一下双向链表的实现,并且我们参考 LinkedList 自己实现一个单链表尝试一下。 什么是链表? 简单的来讲一下什么是链表:首先链表是一种线性的...

    JAVA实现双向链表的增删功能的方法

    在JAVA中,双向链表可以使用类来实现,每个节点是一个对象,包含一个值和两个指针,nextNode和nextNodeF,其中nextNode指向下一个节点,nextNodeF指向上一个节点。 三、链表的创建 在上面的代码中,我们首先创建了...

    双向链表(java实现)

    在计算机科学中,双向链表是一种特殊的链式数据结构,它允许我们在列表的任一位置高效地进行插入和删除...然而,理解如何自定义实现双向链表有助于深入理解数据结构和算法,对于提升编程技能和解决问题的能力大有裨益。

    java 数据结构 双向链表

    这是个java编的双向链表的演示,数据结构是编程中很重要,但很难懂的一部分

    java 实现双向链表实例详解

    Java 实现双向链表实例详解是一种基本的数据结构,在 Java 中 LinkedList 已经实现了这种结构,但是作为开发者,也要拥有自己显示这种结构的能力。双向链表是一种动态的数据结构,它可以在内存中动态地分配和释放...

Global site tag (gtag.js) - Google Analytics