IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> Java实现单链表的插入和查看功能 -> 正文阅读

[数据结构与算法]Java实现单链表的插入和查看功能

单链表

采用头结点的方式创建单链表

1.添加数据

正确写法:

public void addNode(HeroNode node){
    // 建立辅助节点判断当前节点是否已经到达链表尾部
    HeroNode supNeedle = head;
    // 出循环时当前节点一定到达了链表尾部
    while(supNeedle.next != null){
        supNeedle = supNeedle.next;
    }
    supNeedle.next = node;
}

错误写法1:

报错原因:如果初始链表只有头结点,那么supNode.next会指向未知位置

public void addNode(HeroNode node){
    // supNode 初始化指向链表头结点的后一个节点
    HeroNode supNeedle = head.next;
    // 出循环时辅助指针一定到达了链表的尾部
    while(supNeedle != null){
        supNeedle = supNeedle.next;
    }
    supNeedle.next = node;
    
}

错误写法2:

报错原因:supNode仅仅是一个指针,试图把节点赋给指针变量是行不通的

public void addNode(HeroNode node){
    // supNode 初始化指向链表头结点的后一个节点
    HeroNode supNeedle = head.next;
    // 出循环时辅助指针一定到达了链表的尾部
    while(supNeedle != null){
        supNeedle = supNeedle.next;
    }
    supNeedle = node;
    
}

2.查看链表

public void showLinkList(){
    if(head.next == null){
        System.out.println("链表为空");
        return;
    }
    HeroNode supNeedle = head.next;
    while(supNeedle != null){
        System.out.println(supNeedle);
        supNeedle = supNeedle.next;
    }
}

3.小结

  • supNeedle是指针域,指向下一个节点 →

  • 在addNode方法中,从头结点出发

    // temp仅仅是辅助指针
    HeadNode temp = head;  // temp从头结点出发
    while(temp.next != null){
        temp = temp.next;
    }
    
  • 在showLinkList方法中,从有效节点开始

    HeadNode temp = head.next;  //从头结点的后一个节点开始
    while(temp != null){
        System.out.println(temp);
        temp = temp.next;
    }
    

    4.完整代码

    package clwAhu;
    
    public class DLB {
        public static void main(String[] args) {
    
            // 实例化三个节点
            HeroNode hero1 = new HeroNode(1,"张三","端茶","倒水");
            HeroNode hero2 = new HeroNode(2,"李四","敲锣","打鼓");
            HeroNode hero3 = new HeroNode(3,"王五","放火","烧山");
    
            // 建立链表
            SingLinkList singLinkList = new SingLinkList();
    
            singLinkList.addNode(hero1);
            singLinkList.addNode(hero2);
            singLinkList.addNode(hero3);
    
            singLinkList.showLinkList();
    
        }
    }
    
    class SingLinkList{
        // 创建头结点,头结点保持不动
        private final HeroNode head = new HeroNode(0,"","","");
    
        // 添加节点
        public void addNode(HeroNode node){
            // 建立辅助节点来判断是否到达链表尾部
            // 如果第一次指向head后面的节点会导致加入不了
            HeroNode supNode = head;
    
            while (supNode.next != null) {
                supNode = supNode.next;
            }
            supNode.next = node;
    
        }
    
        //查看链表节点
        public void showLinkList(){
            // 判断是否空
            if(head.next == null){
                // 按sout自动弹出
                System.out.println("链表为空");
                return;
            }
    
            // 辅助节点
            HeroNode supNode = head.next;
            while (supNode != null) {
                System.out.println(supNode);
                supNode = supNode.next;
            }
        }
    
    }
    
    class HeroNode{
        public int no;
        public String name;
        public String skill_q;
        public String skill_w;
        public HeroNode next;
    
        // 构造器
        public HeroNode(int no, String name, String skill_q, String skill_w) {
            this.no = no;
            this.name = name;
            this.skill_q = skill_q;
            this.skill_w = skill_w;
        }
        // toString()方法重写
    
        @Override
        public String toString() {
            return "HeroNode{" +
                    "no=" + no +
                    ", name='" + name + '\'' +
                    ", skill_q='" + skill_q + '\'' +
                    ", skill_w='" + skill_w + '\'' +
                    '}';
        }
    }
    
    
  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2021-07-23 11:03:36  更:2021-07-23 11:05:52 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 16:33:34-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码