java中链表的实现_Java中的链表:如何在Java中实现链表?

成为继阵列之后的认证专业,第二大最流行的数据结构是链表。链表是一种线性数据结构,由一系列节点组成,其中每个节点都包含一个值和指向链中下一个节点的指针。在本文中,让我们看看如何使用Java的内置Link

成为继阵列之后的认证专业

,第二大最流行的数据结构是链表。链表是一种线性数据结构,由一系列节点组成,其中每个节点都包含一个值和指向链中下一个节点的指针。在本文中,让我们看看如何使用Java的内置LinkedList类在Java中实现一个链表。下面列出的

是本文涉及的主题:

什么是链表?Java中的链表Linked List类LinkedList类的特点LinkedList类的声明构造函数LinkedList类如何实现?Java程序演示了LinkedList类程序将链表转换为数组程序将数组转换为链表的基本方法ArrayList vs LinkedList

什么是链表

链表是一个包含多个节点的线性数据结构,其中每个元素存储自己的数据和指向下一个元素位置的指针。链接列表中的最后一个链接指向空,表示链的结束。链表中的元素称为节点。第一个节点叫做头部。最后一个节点称为tail。

这里有一个简单的例子:想象一个链表,就像一个连接在一起的回形针链。您可以很容易地在顶部或底部添加另一个回形针。在中间插入一个甚至很快。你所要做的就是断开中间的链条,加上新的回形针,然后重新连接另一半。链表是类似的。

链表的类型

单链表(单向)

01e2633389da6ea6b08db6a61c99fd19.png

双链表(双向)

82c47c96c99720290cf40eab56ab5efb.png

循环链表

8061c8c271c4de74ef729ca1e3014fde.png

现在,让我们看看如何在Java

Java中的

链表作为一种编程语言,通过类和对象等概念关注代码的可重用性。简单地说,类是对象的蓝图或模板。虽然您可以为链表实现构建自己的自定义类,但Java确实提供了一个方便的内置LinkedList类来实现Java中的链表。Java中的

LinkedList类在Java中的

,LinkedList类是list和Deque接口的双链表实现。它还实现所有可选的列表操作并允许所有元素(包括空值)。

LinkedList类的功能

在下面可以找到类LinkedList最重要的属性:

实现Queue和Deque接口。因此,它也可以用作队列、Deque或堆栈,它可以包含所有元素,包括重复元素和空的LinkedList维护元素的插入顺序Java LinkedList类不同步,这意味着在多线程环境中,您必须在外部同步对链接列表的并发修改,我们可以使用集合.synchronizedList(new LinkedList())获取同步链表的LinkedList类没有实现RandomAccess接口,因此,只能使用ListIterator按顺序访问元素列表

LinkedList类声明

LinkedList的迭代元素是具有以下声明的泛型类:

public Class LinkedList;扩展抽象序列表;进口java.util.LinkedList;公共类链接列表{公共静态void main(字符串args[]){/*链表声明*//*add(字符串项)用于添加*链接列表的项*/一_列表.add(“巨蟒”);一_列表.add(“Scala”);系统输出打印(“链表内容:” l_List); /*在指定位置添加项*/一_列表.add(3,“Kotlin”);系统输出打印(“编辑后的列表内容:” l_list);/*添加第一项和最后一项*/一_list.addFirst列表(“第一道菜”);系统输出打印(“添加后的清单内容:” l清单); /*获取并设置列表中的项*/对象firstvar=l_列表.get(0);系统输出打印(“第一项:” firstvar);系统输出打印(“更新第一项后的清单内容:” l清单); /*从一个位置移走*/一_列表.删除(1) (二);系统输出打印(“删除第2和第3位项目后的链接列表” l_列表);/*删除第一项和最后一项*/一_list.removeLast列表();系统输出打印(“删除第一项和最后一项后的最终内容:” l_list); /*迭代链表*/系统输出打印(“使用迭代器显示的列表:”);系统输出打印(下一个itrator());}}}编辑后的内容={Java,Python,JavaScript,Kotlin,Scala,Swift}添加后的内容={第一个课程,Java,Python,JavaScript,Kotlin,Scala,Swift,最后一个课程}第一项={第一道菜}删除第二和第三个位置的项目后的内容={Java9,Python,Kotlin,Scala,Swift,Last Course}删除第一个和最后一个项后的最终内容={Python,Kotlin,Scala,Swift}使用迭代器显示的列表=蟒蛇科特林斯威夫特进口java.util.Arrays数组;进口java.util.List列表;公共类linkedlisttoarray{{ListcourseList=新建链接列表();课程列表添加(“巨蟒”);课程列表添加(“Hadoop”);内部大小=课程表尺寸();系统输出打印(“链表大小=” Size); 数字=课程表(数字);系统输出打印(数组.toString(数字);}}

输出:

链表大小=5[Java、Python、DevOps、Hadoop、AWS]在上面的例子中,我使用了Java的LinkedList类的两个重要方法。下面列出了这些方法及其功能:

size():此方法返回此列表中的元素数。toArray():此方法返回一个数组,该数组按正确的顺序包含此列表中的所有元素示例2:一个Java程序,用于将数组转换为链接列表

。下面的示例演示如何将数组转换为链接列表

包MyPackage;进口java.util.LinkedList;公共类ArrayToLinkedList{公共静态void main(字符串[]参数){String[]courses={“Java”,“PHP”,“Hadoop”,“DevOps”,“Python”};for(字符串s:课程){课程列表.add(s) (二);系统输出打印(“热门课程列表为:” coursesList);}}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,下面是Java链表实现代码,包含详细的文注释: ```java // 定义一个链表节点类 public class ListNode { int val; // 当前节点的值 ListNode next; // 指向下一个节点的指针 // 构造函数 public ListNode(int val) { this.val = val; this.next = null; } } // 定义一个链表类 public class LinkedList { ListNode head; // 链表头节点 // 构造函数 public LinkedList() { this.head = null; } // 在链表末尾添加一个节点 public void addAtTail(int val) { ListNode newNode = new ListNode(val); if (head == null) { head = newNode; // 如果链表为空,则新节点为头节点 } else { ListNode cur = head; while (cur.next != null) { cur = cur.next; // 找到链表的最后一个节点 } cur.next = newNode; // 在最后一个节点的后面添加新节点 } } // 在链表头部添加一个节点 public void addAtHead(int val) { ListNode newNode = new ListNode(val); newNode.next = head; // 将新节点的 next 指针指向原头节点 head = newNode; // 将新节点设为头节点 } // 在指定位置添加一个节点 public void addAtIndex(int index, int val) { if (index <= 0) { addAtHead(val); // 如果插入位置为 0 或负数,则在头部插入 return; } ListNode newNode = new ListNode(val); ListNode cur = head; int i = 0; while (cur != null && i < index - 1) { cur = cur.next; i++; } if (cur == null) { return; // 如果插入位置超出链表长度,则不插入 } newNode.next = cur.next; cur.next = newNode; } // 删除指定位置的节点 public void deleteAtIndex(int index) { if (index < 0) { return; // 如果删除位置为负数,则不删除 } if (index == 0) { head = head.next; // 如果要删除的是头节点,则将头节点指向下一个节点 return; } ListNode cur = head; int i = 0; while (cur != null && i < index - 1) { cur = cur.next; i++; } if (cur == null || cur.next == null) { return; // 如果删除位置超出链表长度,则不删除 } cur.next = cur.next.next; } // 获取指定位置的节点值 public int get(int index) { if (index < 0) { return -1; // 如果获取位置为负数,则返回 -1 } ListNode cur = head; int i = 0; while (cur != null && i < index) { cur = cur.next; i++; } if (cur == null) { return -1; // 如果获取位置超出链表长度,则返回 -1 } return cur.val; } } ``` 以上代码实现链表的基本操作,包括在末尾、头部、指定位置添加节点,删除指定位置的节点以及获取指定位置的节点值。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值