基于Java实现单链表的增删改查

一、新建学生节点类

Stu_Node节点包含
学号:int num;
姓名:String name;
性别:String gender;
下一个节点:Stu_Node next;
为了便于打印节点内容需要重写toString方法

class Stu_Node{
   
    int num;
    String name;
    String gender;
    Stu_Node next;

    @Override
    public String toString() {
   
        return "Stu_Node{" +
                "num=" + num +
                ", name='" + name + '\'' +
                ", gender='" + gender + '\'' +
                '}';
    }
    public Stu_Node(int num, String name, String gender){
   
        this.num=num;
        this.name=name;
        this.gender=gender;
    }
}

二、新建一个操作链表的类,实现增删改查方法

1>创建链表的实现类对象

class SingleLinkedList{
   

}

2>在类里实现尾结点添加链表节点方法

1、定义一个头结点head为空。
2、定义一个节点变量temp等于头结点head。
3、遍历链表找到尾结点。
while循环,结束的标志是temp的下一个节点为空,此时终止while(否则程序会陷入死循环),循环每进行一次要把temp节点的下一个节点赋值给temp变量(否则程序会陷入死循环)。
4、使temp节点的下一个节点指向新增的节点。

class SingleLinkedList{
   
    Stu_Node head = new Stu_Node(0,"null","null");
    //链表的尾节点添加方法
    public void add(Stu_Node node){
   
        Stu_Node temp = head;
        while(true){
   
            if (temp.next==null){
   
                break;
            }
            temp = temp.next;
        }
        temp.next=node;
    }
    
}

按学号顺序插入节点
1、新建临时节点temp
2、新建boolean变量flag用于找到当前带插入节点的位置
3、while循环遍历链表找到插入节点位置,如果temp的下一节点为空表示链表已经遍历完毕此时终止循环;如果temp的下一节点的学号等于要插入的节点学号,此时将flag变量赋值为true结束循环(带插入的节点已经存在插入失败);如果temp节点的下一节点的学号大于带插入节点的学号,此时temp下一节点指向的位置就是要插入的位置。每次链表遍历一次节点要将temp的下一节点赋值给temp节点避免死循环。
4、如果flag为真表示,要插入的节点已经存在,输出插入失败;如果flag为假,令插入节点的下一节点指向temp的下一节点,temp节点的下一节点指向带插入节点。(画图方便理解,图自行脑补)

public void addOrder(Stu_Node node){
   
        Stu_Node temp = head;
        boolean flag = false;
        while(true){
   
            if (temp.next==null)
                break;
            if (temp.next.num >node.num){
   
                break;
            }
            else if (temp.next.num==node.num){
   
                flag = true;
                break;
            }
            temp=temp.next;
        }
        if (flag){
   
            System.out.println("插入失败");
        }
        else{
   
            node.next=temp.next
  • 5
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 8
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值