Day5 代码随想录 刷题记录

总结:

今日共完成3题,总用时2h10mins。整体效率较高,对于链表结构的理解有所加深。

206.反转链表

自己的想法:

使用头插法,依次遍历原链表,遇到值就摘下来移到新的链表中。

正确的做法:双指针法

直接在原基础上直接实现反转,如果再定义一个新的链表,实现链表元素的反转,其实这是对内存空间的浪费。

反转时不用添加或删除节点,而是直接改变next指针的方向。

24. 两两交换链表中的节点

自己的想法:

定义一个双指针,cur指向头结点,cur->next指向与其相邻的结点,通过tmp指针交换val的值之后,统一向后挪动。

出错了❌,要注意的点:

在做的时候没考虑到结点的移动。

直接交换的就是结点的值,而没有改变结点之间的关系。

正确的做法:
设置虚拟头结点。

ListNode* dummyHead = new ListNode(0); // 设置一个虚拟头结点

dummyHead->next = head; // 将虚拟头结点指向head,这样方便后面做删除操作

只有找到要改变的结点的前驱节点,才能改变结点当下的走向。

要操作的指针要指向 要反转的两个结点 的 前一个指针。

注意:

1.明确遍历终止的条件,为奇数/偶数时有不同的终止方式。

2.画图明确要交换的逻辑,设立临时指针来表示可能被交换的变化的指针的值。

19.删除链表的倒数第N个节点

自己的想法:

设立两个指针,原先在同一起跑线。然后让一个指针先运动n个单位,接着两个指针一起运动直到靠后的那个指针指向NULL,此时前方指针的位置正好是倒数第n个位置的位置点。

想法正确√

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值