代码随想录训练营第三天链表理论基础,203移除链表元素,707设计链表,206反转链表。

链表理论基础。从实际理论方面来说,还是第一次接触链表。今天的练习专注于单链表的应用。单链表具体来说指的是一串通过指针链接起来的同类型数据(不同类型的还没接触过),链表中每一个结构体单元块可以被称为节点,相邻的节点通过指针指向,类似于行进队伍中,你只认识你前面的人,你就让跟着他走,他跟着谁你不管,你只需要注意跟紧你前面的人。

而在卡哥的讲解中,重点提出了一种提前设立虚拟头节点的方法:即在链表的头部之前设立新的虚拟链表头部,这样对于链表所有元素来说(尤其包括head所指向的节点)都可以通过一致的操作进行处理,减少了处理单独空出来的head节点的代码。

203移除链表元素

移除链表元素相对来说简单:在遍历链表元素的过程中,判断是否有与目标值相同的节点,并将其上一个节点的指向更改为其下一个节点即可,同时释放该节点内存。

707设计链表

就像卡哥视频里说的那样,这是一道对于链表操作十分经典,考察面十分详细的一道题

首先就是对于链表节点结构体的定义:没啥说的,都这么定义,多用几次就熟悉了。

其次就是问题了

int get(int index) {
        if (index > (size - 1) || index < 0) {
            return -1;
        }
        LinkedList* cur = dum->next;
        while (index--) {
            cur = cur->next;
        }
        return cur->val;
    }

这里的return cur->val 总是报错不知道为什么,我觉得打的跟答案一样吖,就是报错,其他的都是一步步理解答案思路并复刻出来的,就这部分,复刻出来的总是报错,答案粘贴上去就是对。

后面知道了,定义的结构体名字重复了,或者说,应该定义新的结构体,而不是用原有的LinkedList,应该是LEECODE有帮你定义Linkedlist,但是本题需要自己定义新的链表函数,不然会导致不存在cur->val函数

又报错了,感觉还是结构体定义过程出的问题,其他的处理感觉没什么,把卡哥的int get函数都粘贴过来的,还是报错。今天时间有限,明天再继续解决吧。

其他的三个添加,一个删除,在了解了链表的基本运行原理以及相应的代码实现之后就没有那么难了,但是仍有许多细节需要注意,尤其是对于index的判断。

206反转链表

我第一眼想的就是重新建立链表,遍历填入,但是卡哥的双指针法将链表的指向挨个反转确实惊艳。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值