從鏈表中刪除總和值為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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM