单链表

链表

链表是一个可以把一组内存串联在一起的数据结构,每一块内存被叫做结点,每个结点不光存储数据本身,还需要存储下一个节点的引用。最后一个结点指向NULL。
在这里插入图片描述

代码实现

定义单链表时,通过头结点(链表的第一个结点)来定义,拿到了头结点的引用就相当于拿到了链表。

添加

  1. 如果头结点为NULL,将新增元素定义为头结点。
  2. 如果头结点不为NULL,从头结点开始迭代链表,当某个结点的next指向NULL时,说明该结点为尾结点,将该结点的next指向新增结点即可。

删除

  1. 如果删除的是头结点,直接让头结点的下一个结点作为头结点(头结点指向头结点的下一个结点)。
  2. 如果删除的不是头结点,从头结点开始迭代链表,找到要删除的结点后,让该结点的前一个结点指向该节点的后一个结点(注意不要丢了引用)。
public class Link {
    class Node {
        public int data;
        public Node next = null;

        public Node(int data){
            this.data = data;
        }
    }

    public Node header = null;

    //新增链表元素
    public void add(int data){
        if(header == null) {
            header = new Node(data);
            return;
        }
        Node temp = header;
        while (temp.next != null){
            temp = temp.next;
        }
        temp.next = new Node(data);
    }

    //删除链表中指定元素
    public void delete(int data) {
        if(header == null) {
            return;
        }
        //如果删除的元素正好是头结点
        if(header.data == data){
            header = header.next;
            return;
        }

        Node pre = null;
        Node temp = header;

        while (temp.next != null){
            pre = temp;
            temp = temp.next;
            if(temp.data == data) {
                pre.next = temp.next;
                return;
            }
        };
    }

    //打印链表所有元素
    public void printAll(){
        printAll(this.header);
    }

    public void printAll(Node header){
        if(header == null){
            return;
        }
        Node temp = header;
        System.out.println(temp.data);
        while (temp.next != null){
            System.out.println(temp.next.data);
            temp = temp.next;
        }
    }
}

测试:

    public static void main(String[] args) {
        Link link = new Link();
        link.add(1);
        link.add(2);
        link.add(3);
        link.add(4);
        link.add(5);
        link.delete(4);
        link.printAll();
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值