zoukankan      html  css  js  c++  java
  • 从链表中删除总和值为0的连续节点

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

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

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

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

    示例 1:

    输入:head = [1,2,-3,3,1]
    输出:[3,1]
    提示:答案 [1,2,1] 也是正确的。
    示例 2:

    输入:head = [1,2,3,-3,4]
    输出:[1,2,4]
    示例 3:

    输入:head = [1,2,3,-3,-2]
    输出:[1]
     

    提示:

    给你的链表中可能有 1 到 1000 个节点。
    对于链表中的每个节点,节点的值:-1000 <= node.val <= 1000.

    解答1:

      

    public static ListNode removeZeroSumSublists(ListNode head){
          /*声明一个哑节点,其下一个指针指向头*/
            ListNode dumb=new ListNode(0);
            dumb.next=head;
            /*定义一个引用,赋值为哑节点*/
            ListNode h=dumb;
            while (h.next!=null){
              /*从头节点开始,h1始终为h的下一个节点*/
              ListNode h1=h.next;
              /*往后移动的节点*/
              ListNode h2=h1;
              /*h1到h2节点的和*/
              int sum=h1.val;
              /*当h2的下一个节点不为null或h1到h2节点的和为0执行*/
              while (h2.next!=null||sum==0){
                if(sum==0){
                  /*删除h1到h2的节点*/
                  h.next=h2.next;
                  break;
                }
                /*不为0时h2向后移动*/
                h2=h2.next;
                /*加上h2的值*/
                sum+=h2.val;
              }
              /*当sum不为0时向后移动,为0时已经赋过值了,不向后移动*/
              if(sum!=0){
                h=h.next;
              }
            }
            return dumb.next;
        }
    View Code

    来源:力扣(LeetCode)
    链接:https://leetcode-cn.com/problems/remove-zero-sum-consecutive-nodes-from-linked-list

  • 相关阅读:
    7. Bagging & Random Forest
    VS 多工程代码编写
    C++(vs)多线程调试 (转)
    halcon发布
    windows 批处理文件调用exe
    Halcon编程-基于形状特征的模板匹配
    缺陷检测 深度学习
    PID控制
    去掉图片中的红色标记的方法?
    图像处理之图像拼接四
  • 原文地址:https://www.cnblogs.com/wuyouwei/p/11846271.html
Copyright © 2011-2022 走看看