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

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

  • 题目链接
  • 描述
  • 示例
  • 初始代码模板
  • 代码

题目链接

https://leetcode-cn.com/problems/remove-zero-sum-consecutive-nodes-from-linked-list/

描述

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

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

 

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


提示:

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

示例

示例 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]

初始代码模板

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode(int x) { val = x; }
 * }
 */
class Solution {
    public ListNode removeZeroSumSublists(ListNode head) {

    }
}

代码

推荐题解:
https://leetcode-cn.com/problems/remove-zero-sum-consecutive-nodes-from-linked-list/solution/java-hashmap-liang-ci-bian-li-ji-ke-by-shane-34/

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode(int x) { val = x; }
 * }
 */
class Solution {
    public ListNode removeZeroSumSublists(ListNode head) {
        ListNode dump = new ListNode(0);
        dump.next = head;

        Map<Integer, ListNode> map = new HashMap<>();
        int sum = 0;
        for (ListNode cur = dump; cur != null; cur = cur.next) {
            sum += cur.val;
            map.put(sum, cur);
        }

        sum = 0;
        for (ListNode cur = dump; cur != null; cur = cur.next) {
            sum += cur.val;
            cur.next = map.get(sum).next;
        }

        return dump.next;
    }
}

你可能感兴趣的:(leetcode刷题,java,算法,链表)