【Play-with-Data-Structures-master】---part4:链表和递归(递归很重要!)

本文详细解析了LeetCode第203题“移除链表元素”的解决方案,采用添加虚拟头结点的方法简化操作流程,并讨论了递归的基本概念与应用技巧。

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

1、LeetCode第203题解析

移除链表元素
题目描述:

删除链表中等于给定值 val 的所有节点。

示例:
	输入: 1->2->6->3->4->5->6, val = 6
	输出: 1->2->3->4->5
class Solution3 {
//使用头结点进行删除(方便很多,因为所有结点都可以使用前一个结点进行删除)
public:
    ListNode* removeElements(ListNode* head, int val) {
        ListNode *dummyHead = new ListNode(-1);
		dummyHead->next = head;//创建一个头结点,值为-1,指向链表第一个结点
        ListNode *prev = dummyHead;//创建前一个结点指向头结点(创建前一个才能将这个结点后移,而dummyNode不能直接后移)
        while(prev->next != nullptr) {
            if(prev->next->val == val) {
//                ListNode delNode = pre.next;
//                pre.next = delNode.next;
//                delNode.next = null;
                prev->next = prev->next->next;
            } else {
                prev = prev->next;
            }
        }
        prev = nullptr;
        delete prev;
        return dummyHead->next;
    }
};

2、链表和递归

递归:本质上,递归就是将原来的问题,转化为更小的同一问题。
  递归构建本质上可以分为2个部分:最基本问题的求解+将原问题转换为更小的问题。 以后如果忘记递归的定义,再想一想这个sum方法的应用。递归的理解不要拘泥于递归内部怎么调用,而要着眼于递归函数的语意,通过语意来理解很容易! 比如下面的sum函数,就是求解 arr[ l,n)范围内的数字和,这样理解就容易很多。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值