`
hai0378
  • 浏览: 533545 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Java 内部类实现 单向链表

阅读更多

网上看到的内部类实现单向链表,经典,留下以后自己好好研究

package com.gem.j2SE;

class Link
{
 class Node
 {
  private String name; // 保存节点的名字
  private Node next; // 保存下一个节点

  public Node(String name)
  {
   this.name = name;
  }

  public void setNext(Node next)
  {
   this.next = next;
  }

  public Node getNext()
  {
   return this.next;
  }

  public String getName()
  {
   return this.name;

  }

  public void addNode(Node newNode)
  {
   if (this.next == null)
   { // 后面没有东西
    this.next = newNode;
   } else
   {
    this.next.addNode(newNode); // 向下继续插
   }
  }

  public void printNode()
  {
   System.out.println(this.name + "--->");
   if (this.next != null)
   {
    this.next.printNode(); // 向下继续列出
   }
  }

  public boolean searchNode(String name)
  {
   if (this.name.equals(name))
   {
    return true;
   } else
   {
    if (this.next != null)
    {
     return this.next.searchNode(name);
    } else
    {
     return false;
    }
   }
  }

  public void deleteNode(Node preNode, String name)
  {
               if(this.name.equals(name)){
                preNode.next = this.next;
               }else{
                this.next.deleteNode(this, name);
               }
  }
 }

 private Node root; // 要定义出根节点

 public void add(String name)
 {
  Node newNode = new Node(name);
  if (this.root == null)
  { // 没有根节点,则把第一个作为根节点
   this.root = newNode;
  } else
  {
   this.root.addNode(newNode);
  }
 }

 public void print()
 {
  if (this.root != null)
  {
   this.root.printNode();
  }
 }

 public boolean search(String name)
 {
  if (this.root != null)
  {
   return this.root.searchNode(name);
  } else
  {
   return false;
  }
 }

 public void delete(String name)
 {
  if (this.search(name))
  {
   if (this.root.name.equals(name))
   {
    if (this.root.next != null)
    {
     this.root = this.root.next; // 改变根节点
    } else
    {
     this.root = null; // 取消
    }
   } else
   {
    if (this.root.name != null)
    {
     this.root.next.deleteNode(root, name);
    }
   }
  }
 }
}

public class LinkDemo
{
 public static void main(String[] args)
 {
  Link link = new Link();
  link.add("根节点");
  link.add("第一节点");
  link.add("第二节点");
  link.add("第三节点");
  link.add("第四节点");
  link.add("第五节点");
  System.out.println();
  //System.out.println(link.search("第X节点"));
  link.delete("第四节点");
  link.print();
 }

}

分享到:
评论

相关推荐

    LinkedBlockingQueue + 单向链表基本结构

    该队列的主要特点是其内部数据结构采用了一个单向链表,并且实现了 BlockingQueue 接口,提供了线程安全的插入、删除和获取元素的操作。 单向链表是一种简单的数据结构,由一系列节点组成,每个节点包含数据以及...

    循环链表的java实现

    在Java中实现循环链表,我们需要定义一个节点类(Node)来存储数据和指向下一个节点的引用,同时在链表类(CircularLinkedList)中维护头节点和当前大小。以下是实现的关键点: 1. **节点类(Node)**:创建一个内部...

    整数链表

    在`IntegerLinkedList`类的内部,我们可以定义一个结构体(在C++中)或类(在Java中),代表链表节点。例如,可以命名为`ListNode`,包含一个整数变量`val`用于存储整数值,以及一个指针`next`指向下一个节点。 ```...

    JAVA实现链表,双向链表.pdf

    与单向链表相比,双向链表的每个节点多了一个指向前一个节点的指针,因此在双向链表中可以向前或向后遍历,这样为某些操作带来了便利。 #### 三、链表操作方法 在文件描述中,我们看到了几个关键的链表操作方法的...

    基于Java实现数据结构链表相关程序.zip

    2. **Java中的链表实现**: - **LinkedList类**:Java集合框架中的`java.util.LinkedList`类提供了链表数据结构的实现。它实现了List接口,支持添加、删除和修改元素,以及高效的迭代。 - **Node类**:LinkedList...

    Java双向链表的实现

    与单向链表不同,双向链表的每个节点不仅包含指向下一个节点的指针,还包含一个指向前一个节点的指针。这使得我们可以从前向后或从后向前遍历链表。下面我们将详细讲解如何实现一个自定义的Java双向链表,并参考提供...

    Java 实例 - 链表修改源代码-详细教程.zip

    二、Java中的链表实现 在Java中,链表主要有两种实现:LinkedList和ArrayList。ArrayList是基于动态数组实现的,而LinkedList是基于链表实现的。LinkedList类实现了List接口,提供了添加、删除、查找等操作。由于其...

    基于JAVA实现的常用数据结构代码,JAVA实现复杂度、动态数组、链表、栈、队列、二叉搜索树等

    链表分为单向链表和双向链表,其中双向链表可以向前和向后遍历。 4. **栈**:栈是一种后进先出(LIFO)的数据结构,常用于函数调用、表达式求值等场景。Java中,Stack类是Vector类的一个子类,提供了push、pop、...

    java双向循环链表的实现代码

    这种链表结构的特点使得它在执行某些操作时比单向链表更加高效,比如从链表尾部开始的插入或删除操作。本文将介绍Java中双向循环链表的实现代码,代码包括了对链表长度的修改、获取链表长度、获取链表头尾节点等基本...

    山东大学大一高程JAVA链表例题.zip

    在Java中,链表通常通过实现LinkedList类来操作。LinkedList是Java集合框架的一部分,实现了List接口,因此可以像操作数组一样进行索引访问。此外,LinkedList还提供了特有的方法,如addFirst()、addLast()、...

    能直接用的链表

    例如,栈可以使用单向链表实现,通过在链表头部进行插入和删除操作;队列则可以使用双端链表,允许在两端进行入队和出队操作。 链表的性能特点需要注意,由于元素不是连续存储,随机访问(如通过索引访问)效率较低...

    LinkedList:该项目提供了单向、双向和循环链表的示例

    在Java中,链表主要通过`java.util.LinkedList`类来实现。本项目涵盖了单向链表、双向链表和循环链表三种类型,它们各自有不同的特点和用途。 1. **单向链表**: 单向链表只允许从一个方向遍历,每个节点包含两...

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

    - 内部使用双向链表实现。 - 插入和删除操作快,只需修改前后节点的指针即可。 - 查找操作慢,通常需要遍历整个链表才能找到特定元素。 - 适用于频繁插入和删除元素的情况。 **使用场景选择**: - 如果需要频繁...

    双向链表,java.pdf

    双向链表是一种特殊的链式数据结构,它与单向链表相比,每个节点不仅包含指向下一个节点的指针,还包含一个指向前一个节点的指针。这种设计使得在链表中的插入和删除操作更加灵活,可以从两端进行操作。在这个Java...

    leetcode-链表笔记

    单向链表只能按一个方向遍历,双向链表可以从两个方向遍历,循环链表的最后一个节点指向第一个节点,形成环状。 2. **链表的常见操作** - 插入:在链表头部、尾部或指定位置插入新节点。 - 删除:根据节点值或...

    线性表实现源码-java

    2. 单链表实现:在Java中,可以创建一个LinkedList类来实现单向链表。LinkedList实现了List接口,每个节点包含一个元素以及指向下一个节点的引用。插入和删除操作相对快速,因为只需要改变相邻节点的引用,而无需...

    链表(实验报告,指导书,源程序)

    链表有多种类型,其中最常见的是单向链表和双向链表。单向链表中的每个节点只有一个指针,通常指向下一个节点;双向链表则更复杂,每个节点有两个指针,分别指向前一个节点和后一个节点。双向链表的优势在于可以更...

    简单的双向循环链表

    双向循环链表与单向链表不同,它在每个节点中不仅保存了指向下一个节点的指针,还保存了指向前一个节点的指针,这种设计使得在链表中的前后移动更为便捷。在循环链表中,最后一个节点会指向第一个节点,形成一个闭合...

    数据结构与算法-顺序表(链表篇)

    在"List_2"这个文件中,很可能是包含了关于链表实现的代码示例。可能包括以下内容: 1. 单向链表的创建:如何初始化链表,以及如何创建新节点并将其插入到链表中。 2. 遍历链表:如何从头节点开始,按顺序访问每个...

Global site tag (gtag.js) - Google Analytics