java单向链表CRUD的实现

12 篇文章 0 订阅
2 篇文章 0 订阅

什么是链表

  1. 链表是以节点的方式进行存储的,是链式存储
  2. 每个节点包含date域和next域:指向下一个节点
  3. 链表的各个节点不一定是连续的,这样做的作用的更好的利用碎片化的内存
  4. 单向链表分为带头节点和不带头节点,根据需求自定义就可以

代码实现

单向链表实现 –水浒英雄排行榜管理完成对英雄人物的增删改查操作

1.创建节点Node类

package com.csdn.linkedlist;

/**
 *创建节点,此例子链表存储的为绿林好汉,并能存储下一个节点的地址
 */
public class Node {
    String name;//名字
    String nikeName;//昵称
    Integer no;//排名
    Node next;//存储下个节点位置

    public Node(String name, String nikeName, Integer no) {
        this.name = name;
        this.nikeName = nikeName;
        this.no = no;
    }

    public Node() {

    }

    @Override
    public String toString() {
        return "Node{" +
                "name='" + name + '\'' +
                ", nikeName='" + nikeName + '\'' +
                ", no=" + no +
                '}';
    }
}

2.创建链表类

public class LinkedLiset {
    Node head;//

    //无参构造方法,链表创建时,创建链表头
    public LinkedLiset() {
        this.head = new Node(null, null, 0);
    }
 }

3,无脑增加节点方法add
我们只要找到最后一个节点,将节点的next属性指向我们传递的参数 就可以

 //增加
    public void add(Node node) {
        Node temp = head;//创建辅助节点
        //找到链表的最后一个节点
        while (true) {
            if (temp.next == null) {
                break;
            }
            temp = temp.next;
        }
        temp.next = node;
    }

4.遍历方法show()

 //遍历
    public void show() {
        Node temp=head.next;//找到一个有效节点
        if (temp==null){//如果为空,证明为空节点直接结束方法
            System.out.println("linkedlist is empety");
            return;
        }
        while (true){//循环遍历 输出前判断节点是否有效
            if (temp==null){
                break;
            }
            System.out.println(temp);
            temp=temp.next;
        }
    }

5修改方法udate()

 //根据no修改name和nikename
    public void upDate(Node node){
        Node temp=head.next;//创建辅助节点
        if (temp==null){//判断是否为空链表
            System.out.println("linkedlist is empety");
            return;
        }
        //遍历链表
        boolean flag=false;//创建标记 默认为false,找到true
        while (true){
            if (temp==null){
                break;
            }
            if (temp.no==node.no){
                flag=true;
                break;
            }
            temp=temp.next;
        }
        if (true){
            temp.name=node.name;
            temp.nikeName=node.nikeName;
        }else {
            System.out.println("链表中没有这个no");
        }
    }

6.删除方法
删方法的思路:我们找到被删除节点的前一个节点,让这个节点的next直接直接跳过被删除节点,直接指向下一个

  //根据no删除链表中的节点
    public void delete(int no){
        Node temp=head;
        if (head.next==null){
            System.out.println("链表为空");
            return;
        }
        //遍历链表 找到要删除节点的前一个节点
        boolean flag=false;//设置标记
        while (true){
            if (temp.next.no==no){
                flag=true;
                break;
            }
            if (temp.next==null){
                break;
            }
            temp=temp.next;
        }
        if (flag){
            temp.next=temp.next.next;//让被删除节点的前一个节点的next跳过被删除节点,直接指向下一个
        }else {
            System.out.println("链表中没有这个节点");
        }
    }

7.根据排名添加 ,不能有重复addByNo()
这里按照顺序添加 需要先找到加入位置的前一个节点,让新节点的next为temp.next再让temp.next=node;

 //根据排名增加,不可重复添加
    public void addByNo(Node node){
        Node temp=head;//定义辅助节点
        //遍历链表 找到node的前一个节点 把新节点加到其前面
        boolean flag=false;//创建标记
        while (true){
            if (temp.next==null){
                break;
            }
            if (temp.next.no>node.no){
                //此处说明找到了 被加位置的前一个节点
                break;
            }
            if (temp.next.no==node.no){
                //说明节点已经存在不能重复加
                flag=true;
                break;
            }
            temp=temp.next;
        }
        if (flag){
            System.out.println("绿林好汉编号已经存在");
        }else {

            node.next=temp.next;
            temp.next=node;
        }
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值