給你一個鏈表的頭節點 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; }
來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/remove-zero-sum-consecutive-nodes-from-linked-list