《leetcode刷题讲解》—漫漫编程路

目录

1.问题描述

2.代码及解析


1.问题描述

leetcode 1171.从链表中删去总和值为零的连续节点(难度:mid)

给你一个链表的头节点 head,请你编写代码,反复删去链表中由 总和 值为 0 的连续节点组成的序列,直到不存在这样的序列为止。

删除完毕后,请你返回最终结果链表的头节点。

你可以返回任何满足题目要求的答案。

(注意,下面示例中的所有序列,都是对 ListNode 对象序列化的表示。)

来源:力扣(LeetCode)
链接:1171. 从链表中删去总和值为零的连续节点 - 力扣(LeetCode) (leetcode-cn.com)

 2.代码及解析

 

struct ListNode* removeZeroSumSublists(struct ListNode* head)
{
    struct ListNode* pre = (struct ListNode*)malloc(sizeof(struct ListNode));
    pre->next = head;
    struct ListNode* p = pre;
    while (p)
    {
        int sum = 0;
        struct ListNode* q = p->next;
        while (q)
        {
            sum += q->val;
            if (sum == 0)
            {
                //释放被删除的节点
                struct ListNode *del = p->next;
                p->next = q->next; 
                while(del != p->next)
                {
                    struct ListNode *tmp = del;
                    del = del->next;
                    free(tmp);
                }
                q = p->next;
            }
            else
                q = q->next;
        }
        p = p->next;
    }
    head = pre->next;
    free(pre);
    return head;
}

本题根据题目要求,我们要删除和为0的连续节点,我们想到这样一个办法。

我们使用两层循环,外层循环从头开始,内层循环从外循环节点的下一个节点开始,使用一个sum记录此层内循环的值,当sum==0时,我们则将这一段连续节点删除,此方法想到不难,但要注意操作细节,每一步都要注意。

本文到此结束,感谢大家的阅读,欢迎大家点赞评论互关,祝大家万事如意。

  • 13
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 16
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 16
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值