本文章向大家介绍利用java怎么实现一个单链表的基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
Java的特点有哪些 1.Java语言作为静态面向对象编程语言的代表,实现了面向对象理论,允许程序员以优雅的思维方式进行复杂的编程。 2.Java具有简单性、面向对象、分布式、安全性、平台独立与可移植性、动态性等特点。 3.使用Java可以编写桌面应用程序、Web应用程序、分布式系统和嵌入式系统应用程序等。
一、定义:
单链表是一种链式存取的数据结构,用一组地址任意的存储单元存放线性表中的数据元素。链表中的数据是以结点来表示的,每个结点的构成:元素(数据元素的映象) + 指针(相当于JAVA中的引用,指示后继元素存储位置,),元素就是存储数据的存储单元,指针就是连接每个结点的地址数据。
如图所示,data就是当前节点的数据,next是指针,指针存放的是内存地址,是当前结点的下一结点内存地址,顺着这个地址就能找到下一个结点。
package com.example.demo.linkedlist; /** * 结点 * Created by xinan on 2021/02/23 */ public class Node { public Integer value; public Node next; public Node(Integer value) { this.value = value; } public Node(Integer value, Node next) { this.value = value; this.next = next; } public Integer getValue() { return value; } public void setValue(Integer value) { this.value = value; } public Node getNext() { return next; } public void setNext(Node next) { this.next = next; } }
package com.example.demo.linkedlist; /** * 单链表 * Created by xinan on 2021/2/23 */ public class SingleLinkedList { public Node head; /** * 从头部添加 * @param data 待添加数据 */ public void addHead(Integer data) { Node node = new Node(data); node.next = head; head = node; } /** * 从尾部添加 * @param data 待添加数据 */ public void addLast(Integer data) { Node node = new Node(data); if (head == null) { head = node; return; } Node temp = head; while (temp.next != null) { temp = temp.next; } temp.next = node; } /** * 获取链表的长度 * @return 链表长度 */ public Integer length() { int length = 0; Node temp = head; while (temp != null) { temp = temp.next; length ++; } return length; } /** * 从指定下标处添加 * @param index 指定下标 * @param data 待添加的数据 */ public void addByIndex(int index, Integer data) { if (index < 0 || index > length()) { System.out.println("插入下标不合规,请检查!"); return; } if (index == 0) { addHead(data); return; } Node node = new Node(data); Node temp = head; for (int i = 1; i < index; i++) { temp = temp.next; } node.next = temp.next; temp.next = node; } /** * 指定下标删除 * @param index 指定下标 */ public void deleteByIndex(int index) { if (index < 0 || index > length()) { System.out.println("删除下标不合规,请检查!"); return; } if (index == 0) { head = head.next; return; } Node temp = head; for (int i = 1; i < index; i++) { temp = temp.next; } temp.next = temp.next.next; } /** * 通过下标获取结点 * @param index 下标 * @return 结点 */ public Node getByIndex(Integer index) { if (index < 0 || index > length() - 1) { System.out.println("不存在此下标结点"); } Node temp = head; int i = 0; while (temp != null) { if (i == index) { return temp; } i ++; temp = temp.next; } return null; } /** * 打印链表值 */ public void printLink() { Node temp = head; while (temp != null) { System.out.println(temp.value); temp = temp.next; } } /** * 打印某个节点之后的所有值 * @param node */ public static void printAfterNode(Node node) { while (node != null) { System.out.println(node.value); node = node.next; } } /** * 清除单链表 */ public void clearLink() { head = null; } /** * 单链表反转 * @param head 头节点 */ public Node reverseLink(Node head) { Node prev = null; Node curr = head; while (curr != null) { Node nextTemp = curr.next; curr.next = prev; prev = curr; curr = nextTemp; } return prev; } /** * 测试 * @param args */ public static void main(String[] args) { SingleLinkedList linkNode = new SingleLinkedList(); linkNode.addHead(2); linkNode.addHead(3); linkNode.addHead(5); linkNode.addLast(9); linkNode.addLast(7); System.out.println("打印单链表: "); linkNode.printLink(); Node byIndex1 = linkNode.getByIndex(0); System.out.println("获取下标为1的结点值: " + byIndex1.value); linkNode.addByIndex(2, 8); System.out.println("下标2添加后打印单链表: "); linkNode.printLink(); linkNode.addByIndex(0, 11); System.out.println("下标0添加后打印单链表: "); linkNode.printLink(); linkNode.deleteByIndex(0); System.out.println("下标0删除后打印单链表: "); linkNode.printLink(); Node node = linkNode.reverseLink(linkNode.head); System.out.println("反转后打印单链表: "); printAfterNode(node); } }
以上就是小编为大家带来的利用java怎么实现一个单链表的全部内容了,希望大家多多支持亿速云!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。