请选择 进入手机版 | 继续访问电脑版

湖南新梦想

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 37|回复: 0

单向链表的增删改查

[复制链接]

20

主题

22

帖子

149

积分

注册会员

Rank: 2

积分
149
发表于 2023-5-25 23:24:19 | 显示全部楼层 |阅读模式
1、定义节点类
  • 定义节点类Node,包含节点数据和指向下一个节点的指针。
public class Node {
    //数据部分
    private int data;
    //下一个节点
    private Node next;


    public Node() {
    }


2、定义链表类
  • 定义MyLink1类,包含头结点、尾结点、链表大小等属性
  • 实现链表的基本操作方法,包括添加节点、查找节点、删除节点、插入节点、判断元素是否在链表中等
public class MyLink1 {
    private Node head;//头结点
    private Node last;//最后一个节点
    private int size;//节点数量


3、添加节点方法
  • 在MyLink1类中定义方法add,用来添加节点
  • 如果链表为空,直接创建一个新的头结点
  • 否则,寻找到尾结点并在其后面添加新的节点示例代码:public boolean add(int nums) {
        if (head == null) {
            head = new Node(nums);
            last = head;
            size++;

        } else {
            Node node = new Node(nums);
            last.setNext(node);
            last = node;
            size++;
        }
        return true;
    }


4、查找节点方法
  • 在MyLink1类中定义方法find,用来查找节点
  • 返回头结点public Node find() {
        return head;
    }


5、获取头结点和尾结点的数据方法
  • 在MyLink1类中定义方法getHead和getTail,用来返回头结点和尾结点的数据
public int getHead() {
    if (head != null) {
        return head.getData();
    }
    return 0;
}
public int getTail() {
    if (head == null) {
        return 0;
    }
    if (last.getNext() != null) {
        return last.getNext().getData();

    } else {
        return last.getData();
    }
}



6、删除节点方法
  • 在MyLink1类中定义方法delete,用来删除节点
  • 先判断链表是否为空,再遍历链表寻找要删除的节点
  • 如果找到了,就将该节点的前驱节点指向该节点的后继节点
  • 同时更新节点数量
//删除节点
public void delete(int nums) {
    boolean tag = false;
    if (head == null) {
        System.out.println("链表是空的");
    } else {
        Node node = head;
        if (head.getData() == nums) {
            head = node.getNext();
            tag = true;
        } else {
            Node nextnode;
            while (node.getNext() != null) {
                nextnode = node.getNext();
                if (nextnode.getData() == nums) {
                    node.setNext(nextnode.getNext());
                    tag = true;
                } else {
                    node = nextnode;
                }
            }
        }

    }
    if (tag) {
        size--;
        System.out.println(nums + "删除成功!");
        System.out.println("myLink1链表删除" + nums + "后还有" + size + "个节点数据:");
    } else {
        System.out.println(+nums + "不在链表里面!删除失败!");
    }
}


7、获取链表大小的方法
  • 在MyLink1类中定义方法getSize,用来返回链表的节点数量
  • //得到链表节点数量
    public int getSize() {
        return size;
    }


8、实现判断元素是否在链表中的方法
  • 在MyLink1类中定义方法exist,用来遍历整个链表,依次比较每个节点的数据,如果相等就说明该元素在链表中
9、实现插入节点方法
  • 定义方法头部,接收要插入的位置和数据作为参数。
  • 判断插入位置是否合法,即位置大于等于0小于等于链表长度。
  • 创建一个新的节点,并将其数据设置为要插入的值。
  • 判断插入位置是否为头部,如果是则将新节点设置为头结点。
  • 如果插入位置不是头部,则从头结点开始遍历链表,寻找要插入的位置。在遍历过程中需要记录前节点和后节点。
  • 插入新节点。将前节点的next指针指向新节点,新节点的next指针指向后节点,将链表节点数量size加1。。










本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|湖南新梦想 ( 湘ICP备18019834号-2 )

GMT+8, 2023-6-2 12:12 , Processed in 0.040532 second(s), 20 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表