Java实现单链表的插入、删除、计算链表的长度和输出链表
来源:互联网 发布:人可以有多色 知乎 编辑:程序博客网 时间:2024/05/29 00:31
首先定义单链表(以下统称为链表):
链表有两部分:数据和指向下一个节点的指针。
这里引用书中的一张图片:
一般是知道头指针,然后根据头指针做插入、删除、反转、排序、输出等操作。
使用Java实现链表的结构如下:
/** * 链表的结构 * @author haoge */public class Node { //链表节点的数据 int data; //链表指向的下一个节点的指针 Node next = null; public Node(int data) { this.data = data; }}
链表的操作部分:
/** * 链表的插入、删除、计算长度和打印链表 * @author haoge * */public class MyNode { public static void main(String[] args) { MyNode mNode = new MyNode(); //链表的头指针 Node head = null; //新增节点,第一次新增时需要返回头指针,用于定位链表 head = mNode.insertNode(2, head); mNode.insertNode(5, head); mNode.insertNode(4, head); mNode.insertNode(3, head); mNode.insertNode(1, head); //链表的长度 System.out.println("链表的长度为:" + mNode.length(head)); //输出节点 mNode.printList(head); //删除节点 if ((head = mNode.deleteNode(2, head)) != null) { System.out.println("删除索引为2的节点后:"); mNode.printList(head); } else { System.out.println("删除失败!"); mNode.printList(head); } //删除头结点测试 if ((head = mNode.deleteNode(1, head)) != null) { System.out.println("删除头节点后:"); mNode.printList(head); } else { System.out.println("删除失败!"); mNode.printList(head); } } /** * 新增节点 * @param data */ public Node insertNode(int data, Node head) { Node node = new Node(data); if (head == null) { head = node; return head; } Node curNode = head; //循环找到当前链表的尾节点 while (curNode.next != null) { curNode = curNode.next; } //尾节点的指针指向新增加的节点 curNode.next = node; return head; } /** * 链表的长度 * @return */ public int length(Node head) { Node curNode = head; int length = 0; while (curNode != null) { curNode = curNode.next; length ++; } return length; } /** * 删除节点 */ public Node deleteNode(int index, Node head) { //删除的节点的索引小于1或者大于链表的长度,直接返回false if (index < 1 || index > length(head)) { return null; } //删除头结点 if (index == 1) { head = head.next; return head; } //从头结点的下一个节点开始遍历 Node curNode = head.next; //记录当前循环的节点的上一个节点用于删除当前节点 Node preNode = head; int i = 2; while (curNode != null) { if (i == index) { //前一个节点的next指向当前节点的下一个节点,即删除当前节点 preNode.next = curNode.next; break; } else { preNode = curNode; curNode = curNode.next; } } return head; } /** * 打印链表 */ public void printList(Node head) { Node curNode = head; //循环遍历到尾节点 while (curNode != null) { System.out.print(curNode.data + " "); curNode = curNode.next; } System.out.println(); }}
输出结果:
链表的长度为:52 5 4 3 1 删除索引为2的节点后:2 4 3 1 删除头节点后:4 3 1
阅读全文
0 0
- Java实现单链表的插入、删除、计算链表的长度和输出链表
- Java实现链表的插入,删除,排序,输出
- 数据结构Java实现 --单向链表的插入和删除
- 链表的全部操作——创建、插入、查找、删除、计算长度
- 链表的创建,插入,删除,和输出
- 链表的创建,插入,删除和输出
- 链表的创建,插入,删除,输出
- 单链表的基本操作,正序/逆序建表(尾插法/头插法)、计算单链表长度、输出单链表内容、插入、删除,给出完整代码
- 链表的初始化、遍历、删除、插入、判断是否为空、求长度 C语言实现
- 单链表,双向链表的插入,查询,创建,删除,输出
- C++链表的创建和插入删除的实现
- 链表的建立,输出,删除,插入运算的c语言实现
- 链表的插入删除和查找_C++实现
- C语言实现链表节点的插入和删除
- C语言实现链表节点的插入和删除
- 数据结构Java实现【3】----单向链表的插入和删除
- 数据结构Java实现03----单向链表的插入和删除
- 数据结构Java实现03----单向链表的插入和删除
- 动态创建标签
- 赋予普通用户sudo的权限方法
- 网站开发(四)后台的页面导入
- Broadcast的Intent中塞入INTENT_NEW_TASK引发的兼容性问题
- Myeclipse 误删项目文件怎么恢复!
- Java实现单链表的插入、删除、计算链表的长度和输出链表
- 【Linux】CentOS7.0打开端口
- 自动化测试模型
- 图论--最短路径问题--Dijkstra算法和Floyd算法
- Jquery+AJAX的结合使用
- APP微信支付集成——PHP
- windows 磁盘分区
- 考研党 《数据结构(C语言版)》 严蔚敏BiTree基本操作
- 7620:区间合并