//单向链表
public class SingleLinkedList {
//链表节点的个数
private int size;
//头节点
private Node head;
public SingleLinkedList() {
size = 0;
head = null;
}
//链表的每个节点类
private class Node {
//每个节点的数据
private Object data;
//每个节点指向下个节点的连接
private Node next;
public Node(Object data) {
this.data = data;
}
}
//在链表头部添加元素
public Object addHead(Object data) {
Node newNode = new Node(data);
if(size == 0) {
head = newNode;
}else {
newNode.next = head;
head = newNode;
}
size ++;
return data;
}
//删除链表头部元素
public Object deleteHead() {
Object data = head.data;
head = head.next;
size -- ;
return data;
}
//查找指定元素,找到返回节点Node,找不到返回null
public Node find(Object data) {
Node current = head;
int tempSize = size;
while(tempSize > 0) {
if(data.equals(current.data)) {
return current;
}else {
current = current.next;
}
tempSize -- ;
}
return null;
}
//删除指定的元素,删除成功返回true
public boolean delete(Object data) {
if(size == 0) {
return false;
}
Node current = head;
Node previous = head;
while( current.data != data) {
if(current.next == null) {
return false;
}else {
previous = current;
current = current.next;
}
}
//如果删除的是第一个节点
if(current == head) {
head = current.next;
size -- ;
}else {//删除的不是第一个节点
previous.next = current.next;
size -- ;
}
return true;
}
//判断链表是否为空
public boolean isEmpty() {
return (size == 0);
}
//显示节点信息
public void display() {
if(size > 0) {
Node node = head;
int tempSize = size;
if(tempSize == 1) {
System.out.print("["+node.data+"]");
return;
}
while(tempSize > 0) {
if(node.equals(head)) {
System.out.print("["+node.data+"->");
}else if(node.next == null) {
System.out.print(node.data+"]");
}else {
System.out.print(node.data+"->");
}
node = node.next;
tempSize --;
}
System.out.println();
}else {
System.out.println("[]");
}
}
}
//单向链表实现栈
public class StackSingleLinke {
private SingleLinkedList linke;
public StackSingleLinke() {
linke = new SingleLinkedList();
}
//添加元素
public void push(Object data) {
linke.addHead(data);
}
//移除栈顶元素
public Object pop() {
Object obj = linke.deleteHead();
return obj;
}
//判断是否为空
public boolean isEmpty() {
return linke.isEmpty();
}
//打印栈内元素信息
public void disply() {
linke.display();
}
}
测试:
public class TestSingleLinkedList {
@Test
public void testSingleLinkedList() {
SingleLinkedList singleLinkeList = new SingleLinkedList();
singleLinkeList.addHead("A");
singleLinkeList.addHead("B");
singleLinkeList.addHead("C");
singleLinkeList.addHead("D");
//打印当前列表信息
singleLinkeList.display();
//删除节点C
singleLinkeList.delete("C");
singleLinkeList.display();
//查找B
System.out.println(singleLinkeList.find("B"));
System.out.println(singleLinkeList.isEmpty());
singleLinkeList.deleteHead();
singleLinkeList.display();
}
}
结果:
[D->C->B->A]
[D->B->A]
practice.com.wzy.singlelinke.SingleLinkedList$Node@4459eb14
false
[B->A]
相关推荐
这是一个单向链表,它具有插入与删除节点的功能。Entry类实现了链表的各节点。
### JAVA单向链表的实现知识点详解 #### 一、链表基础概念 在深入了解Java单向链表的具体实现之前,我们首先需要了解链表的基本概念。链表是一种线性数据结构,它由一系列节点组成,每个节点包含两部分:数据域和...
本话题主要探讨两种常用的数据结构——单链表和双向链表在Java中的实现,以及相关的操作,如在头部添加节点、在尾部添加节点、遍历、逆置和删除。 首先,我们来理解单链表和双向链表的基本概念。单链表是一种线性...
在Java编程中,单向链表是一种常见的数据结构,它由一系列节点组成,每个节点包含一个数据元素和指向下一个节点的引用。这个数据结构允许快速插入和删除操作,但不支持随机访问。下面我们将深入探讨Java中单向链表的...
在Java中,单向链表可以被实现为LinkedList类,与ArrayList相比,它提供了不同的操作性能特点。ArrayList是基于数组实现的,而LinkedList则是通过节点之间的链接来存储数据,这使得在链表中插入和删除元素更加高效,...
Java中的单向链表是一种常见的数据结构,它由一系列节点组成,每个节点包含一个数据元素和一个指向下一个节点的引用。在这个实例中,我们将详细讨论如何在Java中实现单向链表,包括创建节点、插入节点、显示链表、...
Java SE程序 类实现单向链表Java SE程序 类实现单向链表Java SE程序 类实现单向链表Java SE程序 类实现单向链表Java SE程序 类实现单向链表Java SE程序 类实现单向链表Java SE程序 类实现单向链表Java SE程序 类实现...
java语言模拟单向链表,JAVA数据结构
约瑟夫问题,通过类实现的链表,并加以改进,做成双向链表
在Java编程中,单向链表通常通过定义一个节点类来实现,每个节点包含数据和指向下一个节点的引用。下面我们将深入探讨单向链表的原理、结构以及如何用Java编写源代码。 单向链表的基本结构: 单向链表由一系列节点...
04.单向链表以及单向链表的应用.ppt
在"第一、二章"的压缩文件中,很可能包含了实现单向链表和双向链表操作的C、C++、Java或Python等语言的源代码示例。这些示例程序可能涉及了初始化链表、插入新节点、删除指定节点、查找特定元素、打印链表内容等功能...
Amazon 面试题,如何用O(N)实现在链表中找出 是否出现循环(Loop),算法也可以用在其他语言(C,C++等)
Java实现单向链表反转 Java实现单向链表反转是指将单向链表的顺序颠倒,例如原链表为A->B->C->D->E->F,反转后变为F->E->D->C->B->A。这种操作在实际开发中非常有用,例如在数据处理、数据分析等领域。 单向链表...
总的来说,LinkedBlockingQueue通过单向链表的数据结构,结合阻塞队列的特性,为Java并发编程提供了一种高效的解决方案。了解其内部工作原理有助于我们更好地利用这一工具,优化并发程序的性能和可维护性。在实际...
本篇将深入探讨由Java实现的单向链表和双向链表。 首先,我们来理解单向链表。单向链表中的每个节点包含两部分:数据域(存储实际数据)和指针域(存储指向下一个节点的引用)。这种结构使得链表只能向前遍历,不能...
本文将深入探讨Java中链表的操作实例,旨在帮助开发者更好地理解和运用链表来解决实际问题。 首先,我们需要理解链表的基本概念。链表不同于数组,它不连续存储元素,每个元素(称为节点)包含数据以及指向下一个...
附件是逆序输出单向链表_Java 版本源码,代码首先定义了一个Node类来表示链表的节点,然后定义了一个LinkedList类来表示单链表,并提供了添加节点、打印链表和逆序链表的方法。最后,在Main类中创建了一个链表实例,...
附件是Java版逆序单向链表的实现,一个.java 文件,编译后即可运行,文件绿色安全,仅供学习交流使用,欢迎大家下载学习交流! 代码首先定义了一个ListNode类来表示链表中的节点,然后在reverseList方法中实现了...