文章目录

  • 节点类
  • 链表类(主要)
  • 测试类
  • 小结

节点类

可以根据需要,对节点属性进行修改。注意重写toString()方法,以便后续的输出操作。

//节点类
class Node {public int id;public String name;public Node next;public Node(int id, String name) {this.id = id;this.name = name;}@Overridepublic String toString() {return "Node{" +"id=" + id +", name='" + name + '\'' +'}';}
}

链表类(主要)

所实现的增删改查,反转,逆序等功能基本能适用。实现思路在代码中注释。

//链表类(管理节点)
class LinkedList {//头节点Node head = new Node(0,null);//链表有效数据个数(链表长度)(头节点不计)public int size(){Node temp = head;int size = 0;while (true){if (temp.next == null){break;}size++;temp = temp.next;}return size;}//展示链表public void list(){if (head.next == null){System.out.println("链表为空!");return;}Node temp = head.next;while (true){if (temp == null){break;}System.out.println(temp);temp = temp.next;}}//增(根据id从小到大)public void add(Node newNode){Node temp = head;while (true){ //用来找到链表尾if (temp.next == null) {break;}if (temp.id == newNode.id){System.out.println("要添加的节点的id已经存在,添加失败!");return;}if (temp.next.id > newNode.id){break;}temp = temp.next;}Node node = newNode;newNode.next = temp.next;temp.next = node;}//删(根据id匹配删除)public void remove(int id){if (head.next == null){System.out.println("链表为空!");return;}Node temp = head;boolean flag = false; //用来标记是否找到对应id的节点while (true){if (temp.next == null){break;}if (temp.next.id == id){ //找到要删除节点的前一个节点flag =true;break;}temp = temp.next;}if (flag){temp.next = temp.next.next;}else {System.out.println("没有找到要删除的节点,删除失败!");}}//改(根据id匹配要修改的节点)public void update(int id,String name){if (head.next == null){System.out.println("链表为空!");return;}Node temp = head;boolean flag = false; //用来标记是否找到对应id的节点while (true){if (temp.next == null){break;}if (temp.id == id){flag = true;break;}temp = temp.next;}if (flag){temp.name = name;}else {System.out.println("没有找到要修改的节点,修改失败!");}}//查(根据id匹配)public Node show(int id){if (head.next == null){System.out.println("链表为空!");return null;}Node temp = head.next;boolean flag = false;while (true){if (temp == null){break;}if (temp.id == id){flag = true;break;}temp = temp.next;}if (flag){return temp;}else {System.out.println("没有找到要查找的节点,查找失败!");return null;}}//查找倒数第n个节点public Node lastShow(int n){Node temp = head.next;int size = this.size();if (size < n || n <= 0){System.out.println("查找的节点不存在!");return  null;}for (int i = 0; i < size - n; i++) {temp = temp.next;}return temp;}//链表反转public void reverse(){if (head.next == null || head.next.next == null){return;}Node reverseHead = new Node(0,null);Node cur = head.next; //记录当前遍历到的节点Node next = null; //记录当前遍历到的节点的下一个节点while (true){if (cur == null){ //确保遍历到最后一个break;}next = cur.next; //保存下一个节点,避免断链//使得反转头节点指向遍历到的当前节点,而让遍历到的当前节点指向反转头节点的下一个节点// 确保遍历到的当前节点始终位于反转头节点的下一个cur.next = reverseHead.next;reverseHead.next = cur;//遍历cur = next;}head.next = reverseHead.next; //最后让原头节点指向反转头节点的下一个节点,即可实现原链表的反转}//逆序打印//方法一:先反转//方法二:使用栈结构public void reversePrint(){if (head.next == null){System.out.println("链表为空!");return;}Stack<Node> nodes = new Stack<>();Node temp = head.next;while (true){if (temp == null){break;}nodes.push(temp);temp = temp.next;}while (nodes.size() > 0){System.out.println(nodes.pop());}}
}

测试类

import java.util.Stack;/*** @Author: Yeman* @Date: 2021-10-14-12:55* @Description:*/
//测试类
public class SingleLinkedListTest {public static void main(String[] args) {LinkedList linkedList = new LinkedList();Node node1 = new Node(1, "阿兰");Node node2 = new Node(2, "洛国富");Node node3 = new Node(3, "艾克森");//可以不按照id顺序添加linkedList.add(node1);linkedList.add(node3);linkedList.add(node2);linkedList.list();System.out.println(linkedList.size()); //链表长度//        System.out.println(linkedList.lastShow(2)); //倒数查找//        linkedList.update(2,"张玉宁"); //改
//
//        linkedList.remove(3); //删
//
//        System.out.println(linkedList.show(2)); //查//        linkedList.reverse(); //链表反转linkedList.reversePrint(); //逆序打印}
}

小结

单链表的节点由具体数据域和指针域两部分组成,而带有头节点的单链表的头节点不存储具体数据,其指针域则指向链表的第一个有效节点,即非头节点的第一个节点。

当对单链表进行增删改查,逆序等操作时,要定义一个Node类型的辅助变量来遍历链表,而头节点注意要保持不动。

进行反转操作时,最后需要使得头节点指向反转后的链表的第一个节点,这是唯一一处使得头节点变动的地方。

通用版!完整代码,单链表SingleLinkedList增删改查,反转,逆序,有效数据等Java实现相关推荐

  1. 单链表实现增删改查(含头结点)

    ** 单链表实现增删改查(含头结点) ** **## 单链表** package com.Linked;public class HeadLinked {public String name;// 链 ...

  2. C语言 单链表的增删改查

    单链表的增删改查 目录 单链表的增删改查 链表的创建和输出(有头结点) 链表的查找 链表的删除 链表的修改 链表是一种最常见地采用动态存储分配方式的数据结构,相较于数组而言它更加灵活. 单链表的特点 ...

  3. 2020-12-13# **链表的增删改查,逆置**

    链表的增删改查,逆置,长度,排序,是否为空 1.``准备阶段## ## # include<stdio.h> # include<stdlib.h>typedef struct ...

  4. java单链表 提供增删改查_java实现单链表增删改查的实例代码详解

    package 数据结构算法.链表; /* *定义节点 * 链表由节点构成 */ public class node { private e e; //数据data private node next ...

  5. 单链表实现增删改查(进化版)

    主函数: 链表.cpp #include <bits/stdc++.h> #include "List.cpp" using namespace std; int ma ...

  6. 带头节点单链表的增删改查

    单链表有很多结构循环单链表,有头节点的单链表,无头节点的单链表,双节点单链表,以下源码是以有一个头节点的单链表为例写的增删改查的各种功能,就是下图 然后各个注释也在函数后面写着,这玩意确实还挺难,源码 ...

  7. C语言单链表实现增删改查

    1.概述 单链表使是一种链式存储结构,链表中的数据以结点的方式表示.每个结点由数据域和指针域两部分构成.数据域存储链表的数据元素,指针域存储连接相邻结点的地址. 2.单链表基本组成 typedef s ...

  8. 若依前后端分离版生成代码实现仓库的增删改查

    写在前面 RuoYi-Vue 是一个 Java EE 企业级快速开发平台,基于经典技术组合(Spring Boot.Spring Security.MyBatis.Jwt.Vue),内置模块如:部门管 ...

  9. Django学习笔记(10)——Book单表的增删改查页面

    一,项目题目:Book单表的增删改查页面 该项目主要练习使用Django开发一个Book单表的增删改查页面,通过这个项目巩固自己这段时间学习Django知识. 二,项目需求: 开发一个简单的Book增 ...

最新文章

  1. 腾讯130公顷的深圳新总部了解一下,大小相当于曼哈顿城
  2. 用户、组或角色 'zgb' 在当前数据库中已存在。 (Microsoft SQL Server,错误: 15023)
  3. 【FluidSynth】SoundFont 音源文件资料收集 ( SoundFont 规范 | SoundFont 音源下载 | SoundFont 编辑器 | 博客资源 )
  4. [云炬商业计划书阅读分享] 体育器材
  5. python汉诺塔递归算法_Python文摘:汉诺塔问题与递归算法
  6. Yii 2 美化 url
  7. Redis 快速搭建与使用
  8. PHP+AJAX实现账号注册和登陆,附可用demo
  9. 平常代码练习报错问题解决
  10. 高通平台开发实践经验
  11. 微信公众号开发系列教程一(调试环境部署续:vs远程调试)
  12. LeetCode Search a 2D Matrix
  13. python删除文件夹中的jpg_python删除文件夹下相同文件和无法打开的图片
  14. linux上安装openssl的步骤
  15. everything指定搜索路径
  16. 一、linux内核源码分析(内核源码结构组成)
  17. 隔年增长的题_行测技巧:资料分析中隔年增长的解题关键
  18. Open3DCGAL DTM(数字地形模型)
  19. 经典逻辑推理题(答案)
  20. 微信邮箱登录入口,企业微信企业邮箱,企业邮箱登陆入口

热门文章

  1. JBoss AS 7类加载说明
  2. EasyMock教程–入门
  3. IntelliJ IDEA for Mac在MacOS模式下的版本控制/本地历史记录快捷键(VCS and Local History Shortcut)
  4. 文档中快速输入日期时间的方法
  5. IntelliJ IDEA for Mac 如何取消双击shift键打开全局搜索弹窗
  6. 商品管理后台发布商品时,规格值组合的前端交互的实现逻辑
  7. 连接相机无法识别_春节用相机拍照,如何快速发朋友圈?
  8. 计算机网络笔记----应用层
  9. 【Python科学计算系列】行列式
  10. 【音视频安卓开发 (六)】Android GLSurfaceView播放视频