csdn_export_md

对引用的操纵–链表算法的核心

1.与C++的区别

java的链节点定义如下:

class Link(){
        public int Data;
        public Link next;
    }
  • **区别Java在 Link类中包含了一个Link类型的对象,但是C ++不能在类中使用一个自引用的类定义;
  • C++只能使用一个只向Link对象的指针;
  • 指针的作用和引用是类似的。

2.引用和基本类型

在上面的代码中,Link对象其实没有真正包含另一个Link对象,只是对对象的"引用"。
一个引用是对于某个对象的参照数值,它是一个对象在计算机内存中的地址,并不是具体的对象值。在给定的计算机/操作系统中,所有的引用所占的大小是一样的。所以编译器知道字段的大小并由此构造出整个对象。
基本类型:double a = 100.0; 它是实实在在的在计算机中创建了一个空间,并把100.0放入了这个空间。
而 Link link ,创建空间还需要new。

3.两句理解链表唯一关键的代码

public void Insert(int data){
    Link newlink = new Link(data);
    newlink.next = first;
    first = newlink;
}

在这里插入图片描述
上述是头插法的函数

  • newlink.next = first newlink是分配了空间的link节点,这句的意思是为newlink的next 域赋值,很明显,赋的必须是Link类型的值。把next域赋为first,就是新节点的指向(下一个节点)。
  • first = newlink;再让新节点为First(头节点)。

补充

对于链表的删除操作还需要注意

    public Link delete(int key){
        Link current = first;
        Link previous = first;
        while(current.Date! = key){
            if(current.next == null)
                return null;
            else {
                previous = current;
                current = current.next;
            }
        }
        if(current == first)
            first = first.next;
        else
            previous.next = current.next;
        return current;
    }

上面的代码设置有前驱和后继,用来记录沿着链表寻找数据域为key的节点并删除它。

  • 知道怎么才算删除:改变前驱的next域(如:删除c节点,只需要让b节点的next域变为d即可(不考虑内存空间的话))
  • 如下图,首先pre和current都是指向first节点的,然后开始判断current的数据域是否是key值,如果是,就不进行while循环里面的内容,直接让pre.next = current.next 。如果不是, 就执行previous = current; current = current.next;
    相当于key是雷,current先去踩雷(while循环的判断语句),不是key再让pre指向它,以确保pre一定是删除节点的前驱
    在这里插入图片描述

本文是利用CSDN编写的Markdown格式导出再修改。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值