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

This commit is contained in:
huangge1199 2021-03-05 14:01:10 +08:00
parent e86d3e2cd0
commit 66896e0d05

View File

@ -0,0 +1,71 @@
package com.code.leet.study.t2021.t20210305;
import com.code.leet.entiy.ListNode;
import java.util.HashMap;
import java.util.Map;
/**
* 给你一个链表的头节点 head请你编写代码反复删去链表中由 总和 值为 0 的连续节点组成的序列直到不存在这样的序列为止
* <p>
* 删除完毕后请你返回最终结果链表的头节点
* <p>
* <p>
* <p>
* 你可以返回任何满足题目要求的答案
* <p>
* 注意下面示例中的所有序列都是对 ListNode 对象序列化的表示
* <p>
* 示例 1
* <p>
* 输入head = [1,2,-3,3,1]
* 输出[3,1]
* 提示答案 [1,2,1] 也是正确的
* 示例 2
* <p>
* 输入head = [1,2,3,-3,4]
* 输出[1,2,4]
* 示例 3
* <p>
* 输入head = [1,2,3,-3,-2]
* 输出[1]
* <p>
* <p>
* 提示
* <p>
* 给你的链表中可能有 1 1000 个节点
* 对于链表中的每个节点节点的值-1000 <= node.val <= 1000.
*/
public class RemoveZeroSumSublists {
/**
* 1171. 从链表中删去总和值为零的连续节点
*/
public ListNode removeZeroSumSublists(ListNode head) {
Map<Integer, ListNode> map = new HashMap<>();
int sum = 0;
ListNode temp = head;
while (temp != null) {
sum += temp.val;
if (sum == 0 || map.containsKey(sum)) {
if (sum == 0) {
head = temp.next;
} else {
map.get(sum).next = temp.next;
}
if (head != null) {
map = new HashMap<>();
temp = head;
sum = head.val;
} else {
return head;
}
}
while (temp.next != null && temp.next.val == 0) {
temp.next = temp.next.next;
}
map.put(sum, temp);
temp = temp.next;
}
return head;
}
}