LeetCode 1171. 从链表中删去总和值为零的连续节点 | C语言版

NowCoder Offer 1171. 从链表中删去总和值为零的连续节点

题目描述

题目地址1171. 从链表中删去总和值为零的连续节点

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

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

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

(注意,下面示例中的所有序列,都是对 ListNode 对象序列化的表示。)
在这里插入图片描述

解题思路

思路一:使用双指针
代码实现
/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     struct ListNode *next;
 * };
 */


struct ListNode* removeZeroSumSublists(struct ListNode* head){
    //创建虚拟节点
    struct ListNode* hummyHead=(struct ListNode*)malloc(sizeof(struct ListNode));
    hummyHead->val=0;
    hummyHead->next=head;
    struct ListNode* p=hummyHead;

    //例一:hummyHead(p)(0)->1(q)->2(q)->-3(q)->3->1->NULL
    //例二:hummyHead(p)(0)->1->2(q)->3(q)->-3(q)->-2(q)->NULL
    //例三:hummyHead(p)(0)->1->2->3(q)->-3(q)->4->NULL

    while(p){
        int sum=0;
        struct ListNode* q=p->next;

        while(q){
            sum+=q->val;
            if(sum==0){
                //删除sum=0的序列段(q...q)
                p->next=q->next;
            }
            q=q->next;
        }

        p=p->next;
    }

    //例一:p=0,sum=1+2+-3=0,sum=3+1  hummyHead(p)(0)->3->1->NULL
    //例二:p=0,1+2+3+-3+-2=1;p=1,sum=2+3+-3+-2=0  hummyHead(p)(0)->1->NULL
    //例三:p=0,1+2+3+-3+4=7;p=1,sum=2+3+-3+4=6;p=2,sum=3+-3=0,sum=4; hummyHead(p)(0)->1->2->4->NULL
    return hummyHead->next;
}
运行结果

在这里插入图片描述

参考文章:

https://leetcode.cn/problems/remove-zero-sum-consecutive-nodes-from-linked-list/solutions/57658/cyu-yan-zeng-jia-1ge-qian-qu-jie-dian-by-wpy101001/?orderBy=most_votes&languageTags=cpp%2Cc

思路二:减少遍历节点数
代码实现
在这里插入代码片
运行结果
参考文章:

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

李莲花*

多谢多谢,来自一名大学生的感谢

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值