day3 | 203. 移除链表元素、707. 设计链表、206. 反转链表

本文介绍了链表操作,包括移除特定值的节点、设计一个链表类MyLinkedList以及反转链表的方法。强调了虚拟头节点在处理链表中的作用,以及在添加、删除和反转过程中指针的使用策略。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目一:203. 移除链表元素
  • 要移除节点值为val的节点,需要拥有遍历链表的临时指针变量

  • 因为需要断开val所在节点的前后键,所以要把cur指向val节点前一个,不断地去判断cur->next->val

  • 在删除val节点时,要将其提前存储为临时指针变量,否则重新连键之后就找不到val节点了

  • 构造虚拟头节点的思想:使得原本的第一个节点也能遍历得到,否则还得特殊判断第一个节点的val值,构造头节点使代码更加简洁。

题目二:707. 设计链表

实现功能:

leetcode上,需要自己实现一个链表类MyLinkedList,包含上述方法。

首先这个MyLinkedList类需要包含两个私有成员变量:int类型的 _size, 和LinkedNode*类型的 _dummyhead,只要有了指向虚拟头节点的指针就可以标记这个链表了。

然后这个LinkedNode节点类型需要自己去定义,包含这个节点的值,和下一个节点的指针

注意:当我们在函数里声明一个节点的时候,一定要用new LinkedNode(val) ,这样才能在堆里为这个节点分配空间,然后返回一个指向这个堆空间的指针。如果不用new的话,采用普通构造出的变量是栈区变量,会随着函数结束而收回的。

完整代码:

我们希望cur指向index-1,因为链表在插入和删除任何一个节点的时前后键都要更改,所以把遍历指针定位在index-1位置,这是链表不同于数组的点。从dummyhead开始遍历,可以找到这个index-1位置。如果从index=0位置开始遍历,cur指针就会指向index位置。

题目三: 206. 反转链表

  • 定义一个快指针,用于遍历节点,定义一个慢指针,用来连接键。

  • 循环的结束条件:cur指向空 cur遍历全部节点

  • 要想把链表翻转是一定要定义两个指针的,画图可以看出

  • 注意tmp节点是用来存储cur之后节点的,因为当cur-》next指向pre时,如果不保存tmp以后就找不到了。

总结:今天是day8,才完成day3的任务,继续补作业了。最近阳了好难受。

链表部分没有我想象的那样做得熟练,但是至少是有思路的,经常会卡小bug,要多多练习的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值