链表的remove操作

来源:1-5 从链表中删除元素

懒洋洋爱学习

2022-08-20 12:53:24

相关代码:

//        E result = prev.next.e;
//        prev.next = prev.next.next;
//        prev.next.next = null;
//        size--;
//        return result;
        Node delNode = prev.next;
        prev.next = delNode.next;
        delNode.next = null;
        size--;
        return delNode.e;

注释去是我在老师讲之前自己写的,感觉逻辑上是没有问题的,但在执行removeFist的操作时候,出现了问题。

相关截图:这是正确的,最后一行是删除链表中第一个结点

https://img.mukewang.com/climg/6300665708a6f7eb06320194.jpg


相关截图:这是我自己代码,就出问题了

https://img.mukewang.com/climg/6300669c08350aef05920164.jpg

我的第一行代码,是将要返回的值提前存放在一个变量中

第二行,将删除元素结点的前一个结点-->指向删除元素结点的后一个结点。这时候删除元素的前一个结点的next指向改变了

第三行,让prev.next.next = null ,奥!!!这个时候prev.next已经改变了,所以就错了,

但我用remove方法删除索引为3的位置的666元素时,我的代码是能运行对的

为什么会犯这样的错误了,就是好像在遍历一个数组时,如果要调用数组中的某一个元素时,往往会将它先暂存在一个新的变量当中,这样数组本身的值不会改变。是不是有一点这样的思维在里面呢

写回答

1回答

liuyubobobo

2022-08-22

大赞一下实验精神。发现了问题,通过调试,找到了问题所在,改正了问题。这是最好的学习过程!


==========


“为什么会犯这样的错误了,就是好像在遍历一个数组时,如果要调用数组中的某一个元素时,往往会将它先暂存在一个新的变量当中,这样数组本身的值不会改变。”


可以这样理解。这其实是很经典的一类错误。把一个变量改变以后,把这个变量当做改变前的值(或者状态)去使用。再比如交换两个变量 a 和 b 的时候,我们不能 a = b, b = a。而是需要一个临时变量 t 做暂存:t = a, a = b, b = t,也是这个道理!:)


时间长了,就越来越有经验了:)


继续加油!:)

0

算法与数据结构

波波老师5年集大成之作,算法与数据结构系统学习,考试、面试、竞赛通用

2638 学习 · 1091 问题

查看课程