题目
1. 从链表中删去总和值为零的连续节点
思路与算法
- 只做第三题了,第四题太耗费时间了,第三题对存在的链表进行一个判断就会发现,我们只需要去掉其中相加为0的部分即可。但是该如何实现呢,想到使用map把这个和当前链表的值对应起来,如果找到某两个节点下的和相同,则他们中间的部分的和为0,将其删除即可。见代码。
代码实现
package com.immunize.leetcode.week151;
import java.util.HashMap;
public class Solution3 {
public class ListNode {
int val;
ListNode next;
ListNode(int x) {
val = x;
}
}
public ListNode removeZeroSumSublists(ListNode head) {
ListNode dummy = new ListNode(0);
dummy.next = head;
HashMap<Integer, ListNode> map = new HashMap<>();
int sum = 0;
for (ListNode d = dummy; d != null; d = d.next) {
sum += d.val;
map.put(sum, d);
}
sum = 0;
for (ListNode d = dummy; d != null; d = d.next) {
sum += d.val;
d.next = map.get(sum).next;
}
return dummy.next;
}
}