Java数据结构之简单链表的定义与实现方法示例
发布时间:2020-12-14 21:18:51 所属栏目:Java 来源:网络整理
导读:本篇章节讲解Java数据结构之简单链表的定义与实现方法。供大家参考研究具体如下: 一、概述: 1、原理: 只有一个数据项(链接点Link),每个数据插入时都是对第一个数据的引用。 2、插入数据说明: 当链表没有数据时,插入的值就是第一个数据,如
本篇章节讲解Java数据结构之简单链表的定义与实现方法。分享给大家供大家参考,具体如下: 一、概述: 1、原理: 只有一个数据项(链接点Link),每个数据插入时都是对第一个数据的引用。 2、插入数据说明: 当链表没有数据时,插入的值就是第一个数据,如果链表里有数据,就把当前的数据的next指针指向第一个数据。 3、插入数据图: 4、特点:先进后出 5、实现功能: 数据插入,指定位置插入,显示,查询,删除等 6、删除原理 7、插入头节点原理 二、实现: 1、创建节点 /** * @描述 节点 * @项目名称 Java_DataStruct * @包名 com.struct.linklist * @类名 Node * @author chenlin * @date 2010年6月26日 上午7:58:59 * @version 1.0 */ public class Node { public long data; public Node next; public long getData() { return data; } public void display(){ System.out.print(data + " "); } public Node(long data) { this.data = data; } public void setData(long data) { this.data = data; } public Node getNext() { return next; } public void setNext(Node next) { this.next = next; } } 2、链表实现 /** * @描述 链表 * @项目名称 Java_DataStruct * @包名 com.struct.linklist * @类名 LinkList * @author chenlin * @date 2010年6月26日 上午8:00:28 * @version 1.0 */ public class LinkList { private Node first; public LinkList(){ first = null; } /** * 插入数据 * @param value */ public void insertFirst(long value){ Node newNode = new Node(value); if (first == null) { first = newNode; }else { //把first节点往下移动 newNode.next = first; //把插入的节点作为新的节点 first = newNode; } } /** * 删除头节点 * @param value * @return */ public Node deleteFirst(){ if (first == null) { throw new RuntimeException("链表数据不存在"); } Node temp = first; first = temp.next; return temp; } public Node deleteByKey(long key){ Node current = first; Node last = first; while(current.data != key){ if (current.next == null) { System.out.println("没找到节点"); return null; } last = current; current = current.next; } if (current == first) { //return deleteFirst(); //指向下个就表示删除第一个 first = first.next; }else { last.next = current.next; } return current; } /** * 显示所有的数据 */ public void display(){ if (first == null) { //throw new RuntimeException("链表数据不存在"); return; } Node current = first; while(current != null){ current.display(); current = current.next; } System.out.println("---------------"); } /** * 查找节点1 * @param value * @return */ public Node findByValue(long value){ Node current = first; while(current != null){ if (current.data != value) { current = current.next; }else { break; } } if (current == null) { System.out.println("没找到"); return null; } return current; } /** * 查找节点2 * * @param key * @return */ public Node findByKey(long key) { Node current = first; while (current.data != key) { if (current.next == null) { System.out.println("没找到"); return null; } current = current.next; } return current; } /** * 根据索引查找对应的值 * @param position * @return */ public Node findByPosition(int position){ Node current = first; //为什么是position - 1,因为要使用遍历,让current指向下一个, 所以position - 1的下个node就是要找的值 for (int i = 0; i < position - 1 ; i++) { current = current.next; } return current; } public static void main(String[] args) { LinkList linkList = new LinkList(); linkList.insertFirst(21); linkList.insertFirst(22); linkList.insertFirst(23); linkList.insertFirst(24); linkList.insertFirst(25); linkList.insertFirst(26); linkList.insertFirst(27); System.out.println("编程小技巧测试结果:"); linkList.display(); System.out.println("---查找-------------------------------------"); linkList.findByKey(25).display(); System.out.println("--删除first-------------------------------------"); //linkList.deleteFirst().display(); ///linkList.deleteFirst().display(); //linkList.deleteFirst().display(); //linkList.deleteFirst().display(); System.out.println("-删除指定值---------------------------------------"); linkList.deleteByKey(27).display(); linkList.deleteByKey(21).display(); System.out.println("----------------------------------------"); linkList.display(); } } 显示结果: 更多关于java算法相关内容感兴趣的读者可查看本站专题:《Java数据结构与算法教程》、《Java操作DOM节点技巧总结》、《Java文件与目录操作技巧汇总》和《Java缓存操作技巧汇总》 希望本文所述对大家java程序设计有所帮助。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- java – 如何从Android中的Fragment调用ArrayAdapter构造函
- java生成XML的方法【附demo源码下载】
- java – CDI缺少@ViewScoped和@FlashScoped
- 通过JDK源码学习InputStream详解
- java – JVM是否可以同时运行多个程序?
- 使用volatile来确保Java中共享(但不是并发)数据的可见性
- java – 如何看待“反如果”运动及其目标?
- java – maven在哪里搜索log4j.properties文件?
- javax.persistence字段,getter或setter的注释?
- 如何在Java应用程序中确定PermGen的大小(即以编程方式)?