首页 > 其他分享 >单链表相关

单链表相关

时间:2023-09-02 20:23:12浏览次数:42  
标签:单链 ListNode temp no value next 相关 public

单链表创建总结 *创建 ListNode 结点类 有属性 val next 考虑现实使用val定义为一个no和若干val,toString()重写 *创建 SingleLinkedList 单链表类 有private属性 头指针head 需要初始化 *单链表类需要有的方法: *遍历方法:不为空、则从头指针.next首元结点开始遍历,直至尾部 *插入结点:分头插法、尾插法(temp指针向后移动直至尾部、temp.next = 入参) *修改结点:不为空、则从头指针.next首元结点开始遍历,直至no相等/找不到no,修改val *删除结点:从头指针.next首元结点开始遍历,直至no相等/找不到no,temp指向next.next


package LeetcodeExercise;

import java.awt.*;

public class SingleLinkedListTest {
    public static void main(String[] args) {
        ListNode n1 = new ListNode(1,"111");
        ListNode n2 = new ListNode(2,"222");
        ListNode n3 = new ListNode(3,"333");

        SingleLinkedList singleLinkedList = new SingleLinkedList();
        singleLinkedList.insertNodeTail(n1);
        singleLinkedList.insertNodeTail(n2);
        singleLinkedList.insertNodeTail(n3);

        singleLinkedList.list();
        singleLinkedList.updateNode(new ListNode(2,"789"));
        singleLinkedList.deleteNode(1);
        singleLinkedList.list();

    }
}

class ListNode{

    int no;
    String value;
    ListNode next;
    public ListNode(int no, String value) {
        this.no = no;
        this.value = value;
        this.next = null;
    }

    public int getNo() {
        return no;
    }

    public void setNo(int no) {
        this.no = no;
    }

    public String getValue() {
        return value;
    }

    public void setValue(String value) {
        this.value = value;
    }

    public ListNode getNext() {
        return next;
    }

    public void setNext(ListNode next) {
        this.next = next;
    }

    @Override
    public String toString() {
        return "ListNode{" +
                "no=" + no +
                ", value=" + value +
                '}';
    }
}

class SingleLinkedList{
    private ListNode head = new ListNode(0," ");//head不能动

    //遍历
    public void list(){
        if(isEmpty()){
            return;
        }
        ListNode temp = head.next;
        while (true){
            if(temp == null){
                break;
            }
            System.out.println(temp);
            temp = temp.next;
        }

    }

    public boolean isEmpty(){
        if(head.next == null){
            System.out.println("空链表");
            return true;
        }
        return false;
    }

    //根据no找到结点 ???考虑怎么复用 到底返回what
    public ListNode listByNo(int no){
        if(isEmpty()){
            return null;
        }
        ListNode temp = head.next;
        while (temp.no != no){
            temp = temp.next;
        }
        System.out.println(temp);
        return temp;
    }

    /**
     * @description: 尾部插入节点
     * @params [val] 值
     * @return LeetcodeExercise.ListNode
     */
    public void insertNodeTail(ListNode listNode){
        ListNode temp = head;
        while (true){
            if(temp.next == null){
                break;
            }
            temp = temp.next;
        }
        temp.next = listNode;

    }

    public void updateNode(ListNode listNode){
        if(isEmpty()){
            return;
        }
        ListNode temp = head.next;
        boolean flag = false;
        while (true){
            if(temp == null) {
                break;
            }
            if(temp.no == listNode.no){
                flag = true;
                break;
            }
            temp = temp.next;
        }
        if(flag){
            temp.value = listNode.value;
        }else {
            System.out.println("no listnode.no like this!");
        }
    }

    public void deleteNode(int no){
        ListNode temp = head;
        boolean flag = false;
        while (true){
            if(temp == null) {
                break;
            }
            if(temp.no == no){
                flag = true;
                break;
            }
            temp = temp.next;
        }

        if(flag){
            temp.next = temp.next.next;
        }else {
            System.out.println("no listnode.no like this!");
        }


    }


}

标签:单链,ListNode,temp,no,value,next,相关,public
From: https://www.cnblogs.com/bbnltxdy/p/17674158.html

相关文章

  • Seatunnel实践及相关报错总结
    写在前面:本人也属于小白,这篇文章只是个人使用和总结,可能有些地方理解片面或者有误,各位大神看到的话,可以留言指正,一定认真学习。同时发出来也只是想自己能做个笔记,便于后期整理。如果能帮刚使用seatunnel的朋友避一些坑,那就最好不过了。1、语法模块(官方文档摘抄)1.1source和sink源......
  • Linux中进程相关的API
    在Linux中,进程控制相关的API非常多。以下是一些常用的进程控制相关的系统调用(syscalls)和库函数:创建和终止进程:fork():创建一个新进程,这是创建新进程的最常用方法。vfork():类似于fork(),但有一些差异,主要用于exec调用之前。exec():系列函数(如execl(),execp(),execle()......
  • 函数相关
    定义方式functionfoo{var=10echo$var}foo(){var=10echo$var}返回值使用return语句,但函数返回值只能是整形数值在函数体内使用echo打印变量值,可以将值输出到标准输出中,调用者通过result=${foo}或者result=`foo`的方式获取函数的输出值。......
  • Oracle - 运维相关总结
    读写分离读写分离的重点其实就是数据同步,能实现数据实时同步的技术很多。基于日志的Oracle复制技术,Oracle自身组件可以实现,同时也有成熟的商业软件。选商业的独立产品还是Oracle自身的组件功能,这取决于多方面的因素。比如团队的相应技术运维能力、项目投入成本、业务系统的负......
  • 字符编码的相关介绍
    字符编码的介绍前提知识了解字符编辑的介绍字符编辑的发展UTF-8的由来字符编码的应用编码和解码前提知识了解三大核心硬件所有软件都是运行硬件之上的,与运行软件相关的三大核心硬件为cpu、内存、硬盘,我们需要明确三点#1、软件运行前,软件的代码及其相关数据都是存放于......
  • nginx优化相关
    https://blog.csdn.net/liuxiao723846/article/details/46862381Nginx反向代理,当后端为Https时的一些细节和原理_nginx反向代理https_赶路人儿的博客-CSDN博客 nginx-寒星12345678999-博客园(cnblogs.com)......
  • 243.mysql 内存统计相关
    1.查看mysql是否打开了关于innodb内存相关的监控SELECT*FROMperformance_schema.setup_instrumentsWHERENAMELIKE'%memory/innodb%';2.没有打开的话开一下(自己判断:重启数据库会恢复原有设置)#updateperformance_schema.setup_instrumentssetenabled='yes'wher......
  • Redis缓存相关问题
    缓存穿透:就是,一个请求携带的参数是,id为负一我缓存中肯定没有,而且数据库肯定也没有,那么这个参数为负一的请求就直接绕过了redis,直接就访问了数据库,这就是缓存穿透缓存击穿:就是我有一个热点数据,比如秒杀,好巧不巧在秒杀开始的时候,刚好我缓存的KEY到期了,那么秒杀的请求全部打进了我......
  • Spring 相关 Maven 依赖包
    <?xmlversion="1.0"encoding="UTF-8"?><projectxmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache......
  • pushlet相关资料链接
    http://blog.sina.com.cn/s/blog_647a022e0101fu0n.html http://www.pushlets.com/src/nl/justobjects/pushlet/core/Subscriber.java.html http://lewis-fxb.iteye.com/blog/1446570 http://88250.b3log.org/server-push-based-on-pushlets ......