代码随想录day3

对于第三天的博客书写,可以按照以下方式组织内容:

## 1. 移除链表元素
介绍问题:给定一个链表和一个值,要求移除链表中所有等于给定值的节点。

解题思路:可以使用迭代的方法来解决这个问题。最重要的是定义一个虚拟头节点,并将其指向原链表的头节点,可以为我们的操作带来不少的方便。然后,遍历链表,当遇到节点的值等于给定值时,将其从链表中移除。最后返回虚拟头节点的下一个节点即为移除元素后的链表。

## 2. 设计链表
介绍问题:设计实现一个链表,支持插入、删除和获取链表的元素。

解题思路:首先记得编写一个自己的链表类,包括next指针和链表长度。这样就可以使用一个节点类来表示链表中的每个节点,并在链表类中定义插入、删除和获取元素的方法。需要注意的是,与第一题类似使用虚拟的头结点更加方便哦。插入和删除操作需要注意指针的连接与调整。

这道题主要在于它的要求比较多,比较耗时,但我认为难度并不是特别大,主要在于一些细节方面的补充。例如当链表为空等等操作不合法的情况需要注意区分,总体而言对我们理解链表并且操作还是有显著帮助的。

## 3. 反转链表
介绍问题:给定一个单链表,要求反转链表。

解题思路:可以使用迭代或递归的方式来解决这个问题。

迭代的方法可以使用三个指针来依次修改节点的指向,分别是当前指向的结点cur、cur之前的结点pre以及一个中间结点temp用于在链表反转过程中使用。在开始时我们将cur指向头结点head作为虚拟头结点使用,最后反转成功后返回的是pre结点,是反转后的头结点,此处的cur也是相对应的虚拟头结点。

递归的方法则需要递归调用反转链表函数,并在递归返回时处理节点的指向。这里初次看时我觉得挺抽象的,主要是因为这里的变量名称仿佛有些不符合我们在日常生活中的习惯,但是鉴于这道题是反转链表,就可以尝试理解一下了。但是鉴于我的一些经验来说,递归法的复杂度仿佛通常都是比迭代法要高的,比如本题中的空间复杂度就更高,但在某些题目中递归法却比较好理解(虽然本题不是这样),还是比较推荐迭代法。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值