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

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

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

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

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

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/remove-zero-sum-consecutive-nodes-from-linked-list
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

import java.util.HashMap;
import java.util.Map;

class Solution {
    public ListNode removeZeroSumSublists(ListNode head) {
        ListNode newHead = new ListNode(0);
        newHead.next = head;
        Map<Integer, ListNode> map = new HashMap<>();
        int sum = 0;
        ListNode cur = newHead;
        while (cur != null) {
            sum += cur.val;
            cur = cur.next;
            map.put(sum, cur);
        }
        cur = newHead;
        sum = 0;
        while (cur != null) {
            sum += cur.val;
            cur.next = map.get(sum);
            cur = cur.next;
        }
        return newHead.next;
    }
}


class ListNode {
    int val;
    ListNode next;

    ListNode() {
    }

    ListNode(int val) {
        this.val = val;
    }

    ListNode(int val, ListNode next) {
        this.val = val;
        this.next = next;
    }
}
posted @ 2022-02-15 17:13  Tianyiya  阅读(35)  评论(0)    收藏  举报