【Leetcode刷题篇】- Leetcode1171 从链表中删去总和值为零的连续结点

给你一个链表的头节点 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]

解题思路:hashmap

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode(int x) { val = x; }
 * }
 */
class Solution {
    public ListNode removeZeroSumSublists(ListNode head) {
        // 删去总和值为0的连续结点
        int preSum = 0;
        ListNode cur = head;
        // 存储
        HashMap<Integer,ListNode> dict = new HashMap<>();
        while(cur!=null){
            preSum += cur.val;
            // 存放
            dict.put(preSum,cur);

            cur = cur.next;
        }
        // 新链表
        ListNode dummy = new ListNode(0,head);
        // 继续
        preSum = 0;
        cur = dummy;
        while(cur!=null){
            preSum += cur.val;
            if(dict.containsKey(preSum)){
                cur.next = dict.get(preSum).next;
            }
            cur = cur.next;
        }
        return dummy.next;
    }
}
上一篇:centos vim配置高亮语法和格式化粘贴


下一篇:JavaEE基础(04):会话跟踪技术,Session和Cookie详解