java数据结构和算法——单链表(Linked List)的修改、删除、查询及在链表尾部添加节点的应用示例

目录

    • 一、单链表(Linked List)应用实例一
    • 二、在链表的尾部添加节点数据的思路分析示意图
    • 三、删除链表节点数据的思路分析示意图
    • 四、在链表的尾部添加节点数据代码示例

一、单链表(Linked List)应用实例一

  • 单链表添加节点时,直接添加到链表的尾部

二、在链表的尾部添加节点数据的思路分析示意图

java数据结构和算法——单链表(Linked List)的修改、删除、查询及在链表尾部添加节点的应用示例_第1张图片

三、删除链表节点数据的思路分析示意图

java数据结构和算法——单链表(Linked List)的修改、删除、查询及在链表尾部添加节点的应用示例_第2张图片

四、在链表的尾部添加节点数据代码示例

1、定义一个人员节点类,每一个PersonNode对象就是一个节点

package com.rf.springboot01.dataStructure.singleLinkedList;
/**
 * @description: 定义一个人员节点类,每一个PersonNode对象就是一个节点
 * @author: xiaozhi
 * @create: 2020-07-15 16:44
 */
public class PersonNode {

    public int num;//编号
    public String name;//名称
    public String aliasName;//别名
    public PersonNode next;//指向下一个节点

    //构造器
    public PersonNode(int num, String name, String aliasName) {
        this.num = num;
        this.name = name;
        this.aliasName = aliasName;
    }
    //重写toString方法
    @Override
    public String toString() {
        return "PersonNode{" +
                "num=" + num +
                ", name='" + name + '\'' +
                ", aliasName='" + aliasName + '\'' +
                '}';
    }
}

2、创建一个单链表类,用来管理人员节点

package com.rf.springboot01.dataStructure.singleLinkedList;
/**
 * @description:  创建一个单链表管理人员节点
 * @author: xiaozhi
 * @create: 2020-07-15 16:47
 */
public class SingleLinkedList {

    //先初始化一个头结点,头节点位置固定,不存放任何数据,作用是表示链表的头节点
    private PersonNode head=new PersonNode(0,"","");

    //在链表的尾部添加节点数据(不考虑编号顺序),找到当前链表的最后节点并且将最后这个节点的next指向新的节点
    public void add(PersonNode personNode){
        //因为head节点不能动,因此我们需要一个临时变量temp
        PersonNode temp=head;
        //遍历链表,找到最后
        while(true){
            if(temp.next==null){//已找到链表的最后
                break;
            }
            //如果没有找到最后,将temp后移
            temp=temp.next;
        }
        //当退出while循环时,temp就指向了链表的最后
        //将最后这个节点的next指向新的节点
        temp.next=personNode;
    }
    
    //修改节点数据
    public void update(PersonNode personNode){
        if(head.next==null){
            System.out.println("链表为空");
            return;
        }
        //找到需要修改的节点,根据num修改
        PersonNode temp=head.next;
        boolean flag=false;//表示是否找到需要修改的节点编号,默认已找到
        while(true){
            if(temp==null){
                break;//表示已遍历完链表
            }
            if(temp.num==personNode.num){//已找到需要修改的节点编号
                flag=true;
                break;
            }
            temp=temp.next;
        }
        if(flag){//已找到需要修改的节点编号
            temp.name=personNode.name;
            temp.aliasName=personNode.aliasName;
        }else{
            System.out.printf("没有找到 编号%d的节点,不能修改\n",personNode.num);
        }
    }
    
    //删除链表节点
    public void delete(int num){
        PersonNode temp=head;
        boolean flag=false;//标志是否找到待删除节点
        while(true){
            if (temp.next==null){//已找到链表最后
                break;
            }
            if(temp.next.num==num){//已找到待删除的节点的前一个节点temp
                flag=true;
                break;
            }
            temp=temp.next;//临时变量后移
        }
        if(flag){//找到待删除的节点,可以删除
            temp.next=temp.next.next;
        }else{//没有找到待删除的节点
            System.out.printf("要删除的 d% 节点不存在",num);
        }
    }
    
    //显示链表数据(不包括头节点,因为头节点不存放任何数据)
    public void show(){
        //判断链表是否为空,用head.next判断是因为不包括头节点
        if(head.next==null){
            System.out.println("链表为空");
            return;
        }
         //因为头节点不能动,通过临时变量代替
         //不包括头节点,因为头节点不存放任何数据,所以head.next(头节点的下一个节点)赋值给临时变量temp
        PersonNode temp=head.next;
        while(true){
            //判断是否到链表最后
            if(temp == null){
                break;
            }
            //输出节点信息
            System.out.println(temp);
            //将temp向后移动
            temp = temp.next;
        }
    }
}

3、创建单链表测试类

package com.rf.springboot01.dataStructure.singleLinkedList;

/**
 * @description: 单链表测试类
 * @author: xiaozhi
 * @create: 2020-07-15 16:47
 */
public class SingleLinkedListTest {
    public static void main(String[] args) {
        //创建节点
        PersonNode personNode1 = new PersonNode(1, "张三", "小张");
        PersonNode personNode2 = new PersonNode(2, "李四", "小李");
        PersonNode personNode3 = new PersonNode(3, "王五", "小王");
        PersonNode personNode4 = new PersonNode(4, "赵二", "小赵");

        //添加链表节点数据
        SingleLinkedList singleLinkedList = new SingleLinkedList();
        singleLinkedList.add(personNode1);
        singleLinkedList.add(personNode4);
        singleLinkedList.add(personNode2);
        singleLinkedList.add(personNode3);
        //遍历查询链表节点数据
        singleLinkedList.show();

        System.out.println("修编号为4的节点数据---------");
        //修改链表节点数据
        PersonNode personNode5 = new PersonNode(4, "赵二三", "赵二柱");
        singleLinkedList.update(personNode5);
        //遍历查询链表节点数据
        singleLinkedList.show();
        
        System.out.println("根据编号删除节点数据后的数据展示============");
        singleLinkedList.delete(1);
        //删除之后在显示链表数据
        singleLinkedList.show();

    }
}

4、运行测试类,输出结果
java数据结构和算法——单链表(Linked List)的修改、删除、查询及在链表尾部添加节点的应用示例_第3张图片

你可能感兴趣的:(java数据结构和算法)