链表的含义是指线性表的链式存储。
链表有单链表,双链表,循环链表,这里只给出带头结点的单链表代码。
/** * 带头结点的单链表类 * @author Administrator * */ public class LinkedNode { public Node root;//头结点 public Node tail;// 尾节点 public int size;//单链表长度 /** * 在单链表末尾添加节点的方法 * @param node要添加的节点 */ public boolean add(Node node){ if(root==null){ root=node; tail=node; return true; } tail.setNext(node); tail=node; size++; return true; } /** * 在指定位置插入元素 * @param index * @param node * @return */ public boolean add(int index,Node node){ if(index>=this.size) return this.add(node); else{ Node n=this.root; for(int i=0;n.getNext()!=null&&i<index-1;i++){ n=n.getNext(); } node.setNext(n.getNext()); n.setNext(node); this.size++; } return true; } /** * 查找指定位置的元素 * @param args */ public Object get(int index){ if(index<0||index>size) return null; Node node=root; for(int i=0;i<index;i++){ node=node.getNext(); } return node.getData(); } /** * 删除某一指定位置的元素 * @param index */ public Node delete(int index){ Node node=root; if(index>=0){ for(int i=0;i<index-1&&node.getNext()!=null;i++){ node=node.getNext(); } if(node.getNext()!=null){ if(node.getNext()==this.tail) this.tail=node; node.setNext(node.getNext().getNext()); this.size--; } } return node; } }
/** * 节点类 * @author Administrator * */ public class Node { private Object data;//数据域 private Node next;//引用域 public Object getData() { return data; } public void setData(Student data) { this.data = data; } public Node getNext() { return next; } public void setNext(Node node) { this.next = node; } }
/** * 测试类 * 将学生对象加入链表,按照分数非递减排序后并输出 */ import java.util.Random; public class Student { private int score; public int getScore() { return score; } public void setScore(int score) { this.score = score; } public static void main(String[] args) { LinkedNode link=new LinkedNode(); Random ran=new Random(); //添加节点 for(int i=0;i<10;i++){ Student stu=new Student(); int score=ran.nextInt(10)+1; stu.setScore(score); Node node =new Node(); node.setData(stu); link.add(node); } //输出排序前 System.out.println("排序前"+link.size+"个学生分数:"); for(int i=0;i<link.size;i++){ Student st=(Student)link.get(i); System.out.print(st.score+" "); } //排序 for(int i=0;i<link.size;i++){ for(int j=i;j<link.size;j++){ int max=0; Student st=(Student)link.get(i); Student st2=(Student)link.get(j); if(st.score>st2.score){ max=st.score; st.score=st2.score; st2.score=max; } } } //输出排序后 System.out.println("\n"); System.out.println("排序后"+link.size+"的学生分数:"); for(int i=0;i<link.size;i++){ Student st=(Student)link.get(i); System.out.print(st.score+" "); } } }
相关推荐
进一步学习,可以研究双向链表,它允许在节点的前后进行插入和删除,提高了操作的灵活性。循环链表则形成一个闭合的环,可以简化某些循环操作。 总之,链表是数据结构的基础,理解和熟练运用链表对于提升编程技能...
本话题主要探讨两种常用的数据结构——单链表和双向链表在Java中的实现,以及相关的操作,如在头部添加节点、在尾部添加节点、遍历、逆置和删除。 首先,我们来理解单链表和双向链表的基本概念。单链表是一种线性...
在本文中,我们将深入探讨与链表相关的三个Java编程题目,这些都是出自《剑指Offer》这本书的挑战。我们将依次分析每个题目,理解其要求,并详细解释解决方案。 **第一题:从尾到头打印链表** 这道题目的目标是从...
《Java开发实战经典》是一本以JAVA EE开发为目标的书籍,它强调了学习Java的核心在于理解和运用面向对象的思想。在开始阅读此书之前,读者需要理解JAVA SE与JAVA EE之间的关系,即JAVA SE是JAVA EE的基础,掌握了...
本主题主要关注两种特殊类型的链表——双端链表(Double-ended LinkedList)和双向链表(Bidirectional LinkedList),并以Java语言实现为例进行讲解。 双端链表,也称为双链表,是一种允许在链表的两端进行插入和...
本实例聚焦于Java中的一个重要数据结构——双向链表,它在很多场景下都有着广泛的应用。双向链表与单链表相比,其独特之处在于每个节点不仅包含指向下一个节点的指针,还包含指向前一个节点的指针,这使得在链表中的...
Java语言已经提供了多种内置的数据结构,如数组、链表、栈、队列等,供开发者直接使用。 #### 2. JVM内存结构 Java虚拟机(JVM)的内存结构主要包括三个部分: - **栈内存**:用于存储局部变量和方法调用信息。当...
java经典小游戏——贪吃蛇源码 在我们学习java的时候,为了提高我们的兴趣,我们经常会使用所学到的知识去做一些小游戏,我在这里分享了贪吃蛇的源码,有兴趣的可以去...
这里我们关注的是两个源代码文件——`ListNode.java`和`StringLinkedList.java`,它们是关于链表实现的Java源代码实验。 首先,`ListNode.java`通常会包含链表节点的定义。链表节点是链表的基本组成单元,它存储...
第一个模块——主函数main()的功能是:根据选单的选项调用各函数,并完成相应的功能。 第二个模块——Menu()的功能是:显示提示选单。 第三个模块——Quit()的功能是:退出选单。 第四个模块——Create...
java代码-使用java面向对象的方法实现链表的源代码 ——学习参考资料:仅用于个人学习使用!
LinkedList基于双向链表,插入和删除速度快,但随机访问慢。 1.8 Map接口【理解】 Map接口不同于Collection接口,它存储的是键值对(key-value)的数据结构。HashMap、TreeMap、LinkedHashMap和Hashtable是Map接口...
本文将深入探讨一个基于Java数据结构链表实现的经典问题——“猴子选大王”,也称作约瑟夫环问题。该问题源于一个古老的传说,一群猴子围成一个圈,从某一只开始按顺时针方向依次报数,数到特定数值的猴子会被淘汰,...
Java经典算法50题,是Java开发者提升编程能力的重要练习资源。这50题涵盖了数据结构、排序算法、搜索算法等多个领域,旨在帮助程序员深化对基础理论的理解,并提高实际问题解决能力。通过解决这些题目,你可以熟悉并...
在准备高级JAVA面试时,全面了解和掌握...通过阅读"Java.doc"、"面试_JAVA_宝典—最全的总结.doc"、"Java框架面试题总结_201104.doc"和"java面试.doc"等文档,可以进一步强化这些知识,并找到面试中的常见问题和答案。
首先,我们需要一个LinkedList类来封装链表的操作,例如添加节点、打印链表、以及本文的重点——链表分割。 添加节点到链表的典型操作是插入到链表的末尾: ```java public void append(int data) { Node newNode...
以下是我个人对Java中常用工具类的总结,主要涉及了加密、文件上传和日期处理等核心领域。 1. **加密工具类**: - `java.security` 包下的 `MessageDigest` 类用于实现消息摘要算法,如MD5和SHA,常用于数据完整性...
在Java代码中,定义两个全局变量`pre`和`head`分别表示前一个节点和链表头,使用DFS进行中序遍历,每次访问一个非空节点,更新其左右指针,并将`pre`更新为当前节点,最终形成环形链表。 3. **二叉树中和为某一值的...
在这个话题中,我们将深入探讨两种基本的线性数据结构——单链表和双向链表,并通过Java语言来实现它们。 单链表是一种线性数据结构,其中每个元素(称为节点)包含两个部分:数据域和指针域。数据域存储实际的数据...
Java面试题必备——Java基础知识部分汇总 本文总结了Java基础知识部分的重要知识点,涵盖了Java面试中常见的问题,包括作用域、String类、int和Integer的区别、String和StringBuffer的区别、运行时异常与一般异常的...