public class List<E> { private Node<E> head;//定义链表头节点 private Node<E> last;//定义链表尾节点 private int len;//链表的长度 public void add(E obj)//为链表添加节点 { Node<E> linshi=new Node<E>();//创建一个临时节点 linshi.data=obj; if(head==null) //判断是头节点是否为空 { head=linshi; last=linshi; } last.next=linshi; last=linshi; len++; } public E move(int index) //移除链表节点 { if(index<len&&index>=0) //判断要删除的节点是否超范围 { Node<E> linshi1=new Node<E>(); Node<E> linshi2=new Node<E>(); linshi2=linshi1=head; if(index==0) //当要删除的头节点时,将head向下移 { head=head.next; len--; return linshi1.data; } for(int i=0;i<index;i++) //遍历链表找到要删除的节点 { linshi1=linshi2; linshi2=linshi2.next; } linshi1.next=linshi2.next; if(index==len-1) //当要删除的节点是尾节点时,尾节点向前移 { last=linshi1; } len--; return linshi2.data; } else { System.out.println("超出范围"); } return null; } public E get(int index) //得到第index个节点的数据 { if(index<len&&index>=0)//判断是否超范围 { Node<E> linshi=new Node<E>(); linshi=head; for(int i=0;i<index;i++)//遍历链表,找到节点 { linshi=linshi.next; } return linshi.data; } else { System.out.println("超出范围"); } return null; } public int size() //返回节点的长度 { return len; } public static void main(String[] args) { List<Integer> a=new List<Integer>();//创建一个放Integer数据的链表 for(int i=0;i<5;i++) a.add(i); //加入5个点节点 System.out.println("删除:"+a.move(3)); //删除下标为几的节点 a.add(9); //加入一个节点 for(int i=0;i<a.size();i++) //显示所有节点数据 System.out.println(a.get(i)); } }
此为主体代码,再要创建一个节点类,如下:
public class Node<E> //节点类 { public Node<E> next; public E data; }
和我学的C语言一样,链表是个很好的工具,方便了程序的许多功能,链表一学通,就会觉得很简单,既然会添加节点,那就会插入和删除节点,也可以把所有的节点数据都输出,一样通,样样通,链表的灵活就在于他的节点里的next,可以通过next很轻松的找到其它的节点,当创建数组时,范围是确定的,不能灵活的运用,而链表不同,他可以不确定范围,随时用随时创建,很方便。
java里面给我们封装了LinkedList 链表队列 ,只需要创建对象,再调用里面的函数就可以了。
相关推荐
相比于单向链表,双向链表的每个节点不仅包含指向下一个节点的指针,还包含一个指向前一个节点的指针,这使得在链表中的前向和后向遍历都变得十分便捷。 首先,我们要理解双向链表的基本概念。双向链表由一系列节点...
链表的基本类型包括单向链表(Singly Linked List)和双向链表(Doubly Linked List)。在单向链表中,每个节点只包含一个指向其后继节点的指针;而在双向链表中,除了包含指向后继节点的指针外,每个节点还包含一个...
链表是一种重要的数据结构,在...通过解决此类链表操作的编程题目,你可以深入理解链表数据结构,提高C语言编程能力,同时对动态内存管理和指针操作有更清晰的认识。实践中不断练习,才能更好地掌握这些核心概念。
- 创建一个不带头结点的单向循环链表,链表的每个结点包含数据域`data`和指向下一个结点的指针`next`。 - 链表的构建通常通过尾插法完成,即先创建一个空链表,再逐个添加结点至链表尾部。 2. **打印单向循环...
链表分为单向链表、双向链表和循环链表等类型。在课程设计中,你可能会实现链表的基本操作,如插入节点、删除节点、遍历链表等。这些操作有助于理解和掌握动态内存分配以及指针操作。 接下来,我们讨论二叉树。...
`CreateList` 用于生成一个包含 `n` 个结点的单向循环链表,`DeleteList` 则根据 `m` 的值实现约瑟夫环问题的出列过程。 这个课程设计项目不仅让学生实践了数据结构的基本操作,还锻炼了他们解决复杂问题的能力,如...
报告中提到了使用带头结点的单向循环链表或单链表来存储多项式,并且设计了相关的函数来实现各项操作。 一、设计目的与任务 该课程设计的主要目的是让学生深入理解链式结构的运用,特别是如何用链表来表示和操作...
3. **加深对循环链表及其基本操作的理解**:通过实践加深对循环链表数据结构的认识,理解其在解决实际问题中的优势。 #### 三、课程设计内容与要求 1. **设计的内容**: - 编号为1至n的n个人按照顺时针方向围坐一...
首先,阐述了链表的存储结构,包括单向链表和双向链表的定义,并说明双向链表适用于超长整数加减法运算的存储需求。双向链表通过增加一个指向前趋的指针,使得数据结构既能够反映数据元素与其后继元素的逻辑关系,也...
leetcode添加元素使和等于 算法project Cognitive time complexity 认识时间复杂度 对数理解 log2^n = log2^9 * log9^n ...1)单向链表 2)双向链表 3)单向循环链表 4)双向循环列表 5)静态链表 6
实验过程加深了对数据结构特别是链表的理解,认识到指针操作的重要性。同时,也暴露了平时学习中的不足,如对链表指针操作的不熟练。未来需要加强编程实践,深入理解数据结构。 对于实验内容的改进,可以考虑扩展到...
数据页内部的数据行(记录)是通过单向链表组织起来的,以支持数据的插入和删除操作。 数据行按照主键从小到大排序,并且每个数据页内部包含页目录。页目录中记录了数据行的主键与所在槽位(数据行存储的具体位置)...
在实验二中,学生将接触到单向链表的创建、遍历、插入、删除等操作,通过这些操作,学生可以体会到链式存储结构在元素管理上的灵活性和高效性。实验三则在此基础上进一步扩展,学习双向链表的创建和操作,这是对单向...
在这一任务中,学生们从零开始,学习如何创建一个单向链表,并且能够添加和删除节点,最终用它来存储和管理学生信息。通过这个任务,学生们深刻理解了链表的特点及其在数据存储和管理中的应用。 实验报告还包含了...
与单向链表相比,双向链表的每个节点都包含两个指针,一个指向前一个节点,另一个指向后一个节点,这样的结构使得双向链表在元素的插入和删除操作中更为灵活。对于初学者而言,理解双向链表的原理并能熟练编写相关...
在这个过程中,学生需要确定每个节点的出列顺序,这意味着在特定条件下需要移除节点,这要求学生对循环链表的迭代过程有清晰的认识,并且能够处理节点的删除操作。 排序算法是数据结构课程中另一个重要组成部分。...
双向链表**:与单向链表类似,但每个节点还包含一个指向前一个节点的指针,使得可以从两个方向遍历列表。 2. **正确答案**:C. 双向链表 3. **解释**:双向链表提供了从前向后和从后向前两种遍历方式,对于从链尾...
链表分为单向链表、双向链表和循环链表等类型,每种类型都有其适用的场景。 树和二叉树是非线性结构的典型代表。树是一种层次结构,其中每个节点最多有一个前驱节点和多个后继节点。二叉树是一种特殊的树,每个节点...
介绍了单向链表、双向链表和循环链表等不同类型的链表。 ##### 3.3.2 链表的插入与删除 探讨了链表的插入和删除操作,这是链表的核心功能之一。 **3.4 双向链表** 双向链表是一种特殊的链表,每个节点有两个指针...