leetcode----链表类型---每日一题---第203题

1、今日题目:第203题—删除链表元素


2、题目要求如下:

给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val == val 的节点,并返回 新的头节点 。

例如:
在这里插入图片描述
在这里插入图片描述

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/remove-linked-list-elements


3、代码及解题思路

# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, val=0, next=None):
#         self.val = val
#         self.next = next
class Solution:

    def remove(self, head, val):

        if head.next is None:
            return head
        
        node = self.remove(head.next, val)

        if node.val == val:
            head.next = node.next
        
        return head

    def removeElements(self, head: ListNode, val: int) -> ListNode:
        """
            思路:
                一、特殊情况:
                    head -> [] or head.next -> [] return None

                
                二、一般情况:
                    1、定义一个工作节点 当作  头节点 比如 node1.next = head
                    2、两个个工作指针 pre和p ,其中pre记录前驱,p用来检测当前节点是否满足 p.val == val
                    3、如果满足pre.next = p.next p = p.next

                三、迭代条件
                    p = None时结束


                四、运行出错情况:
                    [1] val = 2时 出错,原因分析:head.next -> [] 这里出错

                    解决:将head.next 删除
                

        """

        # method1 迭代
        # if not head:
        #     return None

        # node1 = ListNode(-1, head)

        # pre, p = node1, head

        # while p:
        #     if p.val == val:
        #         pre.next = p.next
        #         p = p.next
        #     else:
        #         pre = p
        #         p = p.next
        
        # return node1.next

        # method2 递归

        """
            递归写两个函数原因是:
                [7, 7 ,7 ,7 ,7]这种情况

                在递归时,最后返回的是head,而此时head.val == val的

                所以另起一个函数,便于操作
        """

        if head is None:
            return head

        node1 = ListNode(-1, head)


        return self.remove(node1, val).next



4、收获

巩固递归式,加强理解。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值