算法训练营打卡Day3

今天的打卡内容与链表有关,第一次接触链表,个人感觉十分陌生和晦涩,花费大约2h在学习和理解链表的概念和代码上(链表好难o(╥﹏╥)o)

参考视频包括但不限于:

03 链表的初始化_遍历__哔哩哔哩_bilibili

 https://www.bilibili.com/video/BV1FU4y1X7WD/share_source=copy_web&vd_source=1261b97a33f42388f92b473554874c36

题目1.

203.移除链表元素

关键在于引入了虚拟头节点dummy_head(反复听了好几遍),它使得我们不需要单独处理头节点被删除的情况。在遍历链表时,我们总是检查current.next的值,并根据需要调整current.next的指向,从而跳过值为val的节点。最后,返回dummy_head.next作为删除所有值为val的节点后的链表头节点。

# Definition for singly-linked list.

# class ListNode(object):

#     def __init__(self, val=0, next=None):

#         self.val = val

#         self.next = next

class Solution(object):

    def removeElements(self, head, val):

        '''

        这段代码实现了一个在单链表中删除所有值为val的节点的功能,

        通过引入一个虚拟头节点(dummy head)来简化删除操作。

        创建一个虚拟头部节点,其next指针指向原链表的头节点head  

        这样做的好处是:我们不需要单独处理头节点被删除的情况

        '''  

        dummy_head = ListNode(next=head)  

         

        # 初始化当前节点为虚拟头部节点,这样我们就可以从虚拟头部节点开始遍历链表  

        current = dummy_head  

         

        # 当current的next不为空时,继续遍历链表  

        # 这里我们检查current.next是因为我们是在考虑删除current.next指向的节点  

       

        #如果current.next存在,我们就进入循环体

        while current.next:  

            # 如果当前节点的下一个节点的值等于val,则删除该节点  

            # 通过将current.next指向current.next.next,即跳过了值为val的节点  

            if current.next.val == val:  

                current.next = current.next.next  

            # 如果当前节点的下一个节点的值不等于val,则继续向后遍历  

            else:  

                current = current.next  

       

        # 遍历结束后,dummy_head.next即为删除所有值为val的节点后的链表头节点  

        # 因为我们是从虚拟头部节点开始遍历的,所以即使原链表的头节点被删除,我们也能通过dummy_head.next找到新的头节点  

        return dummy_head.next

感觉一段时间后又会忘记思路了,作此文章,以便日后复习~

题目2.

707.设计链表

摸了,真的好难,思路看了又忘,救命,我先洗洗睡了

题目链接/文章讲解/视频讲解:代码随想录

总结:链表重在理解,难在实操。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值