1)链表:链表是java中数据结构之一,在内存中是一块不连续的内存空间,彼此之间的数据连接关系是一个对象持有下一个对象的引用。链表的插入方式可简单分为从链表头部插入和从尾部插入,其中从头部插入较为简单。下面分别通过代码实现:
2)从头部插入代码:
package com.zt.link; import java.util.NoSuchElementException; public class LinkTest { private Node first;//链表头元素 private int size;//链表大小 public static void main(String[] args) { LinkTest link = new LinkTest(); link.addFirst("结点1"); link.addFirst("结点2"); link.addFirst("结点3"); System.out.println(link.size); link.deleteFirst(); link.display(); } //在链表头部添加结点 public boolean addFirst(Object value){ Node newNode = new Node(value, null); if(first == null)//判断是否为第一个结点,若是直接把新节点赋值给第一个结点 first = newNode; else { newNode.next = first;//若不是第一个结点,新节点作为第一个结点 first = newNode; } size ++; return true; } //在链表头部删除结点 public Node deleteFirst() { if(first == null) throw new NoSuchElementException(); Node temp = first; first = first.next; size --; return temp; } //获取指定位置的元素 public Node get(int index) { if(index < 0 ||index > size) throw new IllegalArgumentException(); Node cur = first; int count = 0; while(cur != null) { if(count ++ == index) return cur; else { cur = cur.next; } } return null; } //遍历链表 public void display() { Node cur = first; while(cur != null){ System.out.println(cur.value); cur = cur.next; } } } class Node { Object value;//为了方便取值,没有加权限修饰符 Node next; public Node(Object value,Node next) { this.value = value; this.next = next; } }
从尾部插入代码,为了插入方便多添加一个last结点:
package com.zt.link; import java.util.NoSuchElementException; public class LinkTest { private Node first;//链表头元素 private Node last;//链表尾元素 private int size;//链表大小 public static void main(String[] args) { LinkTest link = new LinkTest(); link.addLast("结点1"); link.addLast("结点2"); link.addLast("结点3"); link.deleteLast(); System.out.println(link.get(1).value); link.display(); } //在链表尾部添加结点 public boolean addLast(Object value) { Node newNode = new Node(value, null); if(first == null)//判断是否为第一个结点,若是第一个结点和尾结点指向新结点 first = last = newNode; else { last.next = newNode; last = newNode; } size ++; return true; } //移除尾元素 public Node deleteLast() { if(first == null)//判断链表是否为空 throw new NoSuchElementException(); Node cur = first;//cur表示当前遍历结点 Node prev = null;//prev当前结点的上一个结点 while(cur != null) { if(cur == last) { Node temp = last; last = prev; last.next = null; size --; return temp; } else { prev = cur; cur = cur.next; } } return null; } //获取指定位置的元素,和从头部插入一样 public Node get(int index) { if(index < 0 ||index > size) throw new IllegalArgumentException(); Node cur = first; int count = 0; while(cur != null) { if(count ++ == index) return cur; else { cur = cur.next; } } return null; } //遍历链表,和从头部插入一样 public void display() { Node cur = first; while(cur != null){ System.out.println(cur.value); cur = cur.next; } } } class Node { Object value;//为了方便取值,没有加权限修饰符 Node next; public Node(Object value,Node next) { this.value = value; this.next = next; } }
相关推荐
在Java中,`java.util.Timer`类和`java.util.TimerTask`类提供了这样的功能,但它们是基于线程的,而非链表实现。然而,如果我们想用链表来实现定时器,我们可以模拟这个过程,创建一个节点代表每个待执行的任务,...
本话题主要探讨两种常用的数据结构——单链表和双向链表在Java中的实现,以及相关的操作,如在头部添加节点、在尾部添加节点、遍历、逆置和删除。 首先,我们来理解单链表和双向链表的基本概念。单链表是一种线性...
在本篇文章中,我们将探讨如何在Java中实现一个简单的双向链表。 首先,我们需要定义一个表示链表节点的类,通常命名为`Node`。这个类包含三个字段:`data`用于存储数据,`prev`指向前一个节点,`next`指向后一个...
在Java中,我们可以通过定义一个简单的链表节点类(`Node`)来表示链表中的每个节点,并通过一系列的方法来实现倒序功能。 #### 定义节点类 首先,我们需要定义一个`Node`类,该类包含两个属性:`data`用于存储...
在Java编程语言中,链表是一种重要的数据...以上就是关于Java语言中单链表实现的知识点,涵盖了链表的基本概念、类结构、操作方法以及实际应用。理解这些概念有助于更好地设计和优化程序,特别是在处理动态数据集时。
双向链表是一种数据结构,它的每个节点不仅包含数据,还包含指向前一个节点和后一个节点的指针,这使得在链表中进行插入和删除操作相对简单。 在高精度加法中,我们需要处理两个大整数的和。首先,我们将这两个大...
这可以通过简单的迭代实现: ```java public void traverse() { ListNode currentNode = head; while (currentNode != null) { System.out.println(currentNode.val); currentNode = currentNode.next; } } ``...
以下是一个简单的动态链表实现: ```java public class DynamicLinkedList { Node head; public DynamicLinkedList() { this.head = null; } // 插入节点到链表尾部 public void add(int value) { if ...
C语言中的链表实现主要依赖于结构体和指针。一个基本的链表节点结构体通常包含两个部分:数据存储区域和指向下一个节点的指针。例如: ```c typedef struct Node { int data; // 存储的数据 struct Node* next; /...
在“java链表反转及排序”这个主题中,我们将探讨如何在Java中实现单向链表的反转和排序。首先,我们创建一个链表节点类,包含数据和指向下一个节点的引用: ```java public class ListNode { int val; // 节点值 ...
链表是一种基础且重要的数据结构,它在计算机科学和编程,尤其...理解链表的工作原理以及如何在Java中实现和使用链表,是每个Java开发者必备的基础技能。通过深入学习和实践,我们可以利用链表来解决各种实际编程挑战。
这里我们关注的是两个源代码文件——`ListNode.java`和`StringLinkedList.java`,它们是关于链表实现的Java源代码实验。 首先,`ListNode.java`通常会包含链表节点的定义。链表节点是链表的基本组成单元,它存储...
本项目“java入门程序(模拟图书馆管理)”是针对初学者设计的一个简单的学习资源,它通过使用链表这种数据结构来实现对图书馆书籍的管理功能,帮助初学者理解Java编程以及链表的基本概念。 链表是一种线性数据结构...
总之,循环链表在Java中的实现涉及节点类的设计和链表类的操作方法。理解并掌握循环链表的特性对于解决一些特定问题,如判断链表是否有环、高效地遍历数据等,是非常重要的。通过阅读和实践提供的`LinkedList.java`...
以上代码实现了一个简单的单向链表,包括插入、删除、遍历和获取链表长度的功能。在实际的软件开发中,链表常被用作基础数据结构,特别是在需要频繁进行插入和删除操作而对顺序访问性能要求不高的场景。例如,解析...
3. `LinkedListClass.java` - 这个文件很可能是对标准Java的`java.util.LinkedList`类的一个简单实现或者示例,`LinkedList`是Java集合框架的一部分,实现了`List`、`Deque`和`Cloneable`接口。它使用双向链表来存储...
`NodeHead.java`可能代表一个特殊的节点类型,例如一个带额外信息的头节点,但这在标准链表实现中并不常见。如果这个类存在,它可能会扩展`Node`类,增加一些额外的功能或属性。 总的来说,这些文件提供了链表数据...
本主题将深入探讨如何使用Java实现自己的单链表、双链表以及Map存储。 首先,我们来讨论单链表。单链表是一种线性数据结构,其中每个元素(节点)包含两个部分:一个是数据部分,用于存储实际的数据;另一个是引用...
在这个话题中,我们将深入探讨两种基本的线性数据结构——单链表和双向链表,并通过Java语言来实现它们。 单链表是一种线性数据结构,其中每个元素(称为节点)包含两个部分:数据域和指针域。数据域存储实际的数据...