单向链表的增删改(Java)

单向链表的增删改(Java)

链表节点的组成有数据元素(data域)和下一个节点的存储位置(next域)

pubulic class Node{
    public int data;//数据元素
    public test next;//指向下一个节点

    public int getData() {
        return data;
    }

    public void setData(int data) {
        this.data = data;
    }

    public test getNext() {
        return next;
    }

    public void setNext(test next) {
        this.next = next;
    }
    //构造方法
    public Node(int data){
        this.data=data;
    }
}
添加节点(按顺序)

思路:

  1. 首先找到新添加的节点的位置, 是通过辅助变量(为要添加节点的前一个节点), 通过遍历来搞定
  2. 新的节点.next = temp.next
  3. 将temp.next = 新的节点
public void add2(Node node){
//定义一个头结点,内部为空
private HeroNode head=new HeroNode(0,"");
    Node temp=head;//辅助变量,头结点不能动
    boolean flag=false;//判断是否可以添加
    while (true){
        if(temp.next == null)//已经遍历到链表最后
            break;
        else if(temp.next.data>node.data){//找到位置
           break;
        }else if(temp.next.data==node.data) {//不能添加,有重复
            flag=true;
            break;
        }
        temp=temp.next;
    }
    //循环结束时,temp位置为插入节点的前一个节点
    if(flag){
        System.out.println("有重复节点,不能添加");
    }else {
        node.next=temp.next;//将新节点和下一位节点连接起来
        temp.next=node;//将新节点和上一位节点连接起来
    }
}
修改节点

思路:
1.遍历找到要修改的节点的位置
2.修改节点

public void update(Node newNode){
    //链表为空
    if (head.next==null)
        return;
    Node temp=head.next;
    boolean flag=false;//判断是否找到该节点
    while (true){
        if (temp==null)//遍历完没有找到
        {break;}
        else if(temp.data==newNode.data) {
            flag=true;//找到了
            break;
        }
        temp=temp.next;
    }
    if (flag){
        temp.name=newNode.name;//data不能修改,修改里面的内容,类中没写
    }else {
        System.out.println("没有该节点");
    }
}
删除节点

思路:
1.遍历链表,找到该节点,定义辅助变量(temp)为该节点的上一个节点
2.使该节点的上一个节点指向该节点的下一个节点,
即temp.next = temp.next.next
注意:被删除的节点将不会有其他引用指向,会被垃圾回收机制回收

public void delete(int id){
    //链表为空

    if (head.next==null)
        return;
    Node temp=head;
    boolean flag=false;//判断是否找到该节点
    while (true){
        if (temp.next==null)//遍历完
        {break;}
        else if(temp.next.data==id) {
            flag=true;//找到了
            break;
        }
        temp=temp.next;
    }
    if (flag){
        temp.next=temp.next.next;//将该节点的上一个节点直接连接下一个节点
    }else {
        System.out.println("没有该节点");
    }
}

输出链表

//显示链表
public void list(){
    Node temp=head.next;
    if(temp==null){
        System.out.println("链表为空!!!");
        return;
    }
    while (true){
        if (temp == null)
            break;
        System.out.println(temp);
        temp=temp.next;
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值