链表删去和为零的连续节点

链表删去和为零的连续节点

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

题解:要求删除一个连续节点和为0的组成的序列,
一、设置一个带头结点的链表指向当前链表
二、利用三指针的方式操作p指针指向当前节点,q指针表示从当前节点开始向后遍历
三、遍历条件(sum0||q.next!=null)
如果sum
0则让h的next指向当前q的next(中间和为0的序列删除)
如果遍历结束sum!=0说明以当前节点往后遍历的没有sum==0的,那么久跳到一下个节点继续

时间复杂度:O(N*N)
控件复杂度O(1)

public class removeZeroSumSublists {
    public static ListNode removeZeroSumSublists(ListNode head){
        //生成带头节点的链表
        ListNode dummy=new ListNode(0);
        dummy.next=head;
        ListNode h=dummy;
        while (h.next!=null){
            ListNode p=h.next;
            ListNode q=p;
            int sum=p.val;
            while (q.next!=null||sum==0){
                if (sum==0){
                    h.next=q.next;
                    break;
                }
                q=q.next;
                sum+=q.val;
            }
            if (sum!=0){
                h=h.next;
            }
        }
        return dummy.next;
    }
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值