老师这块我改造了一下,不知道理解的对不对,你的for循环没有放到{这里处理},太多逻辑 有点看的懵

来源:5-3 删除和为 0 的连续节点问题

慕虎7937911

2021-10-28

class Solution {
public ListNode removeZeroSumSublists(ListNode head) {
//删除和为0 那么先放入为0的虚拟头结点 这样才能匹配上第一次的数据
ListNode dummy=new ListNode(-1);
dummy.next=head;
//前缀和 访问的节点数据
Map<Integer,ListNode>map=new HashMap<>();
map.put(0,dummy);
int sum=0;
for (;head!=null;head=head.next){
sum+=head.val;
if(map.containsKey(sum)){
//如果前缀和匹配上为0了
//获取前缀和对应的节点
ListNode temp=map.get(sum);
//要删除的和
int s=sum;
//循环下一个节点 不匹配当前节点 等于当前节点就跳出循环
while(temp.next!=head){
//s每次加上temp的下一个节点的值
s+=temp.next.val;
//然后删除这个s前缀和的节点
map.remove(s);
//然后temp的下一个节点指向他要删除的下一个节点
temp.next=temp.next.next;
}
//最后还要指向要删除的下一个节点,这样也把head节点给删掉了
temp.next=temp.next.next;
}else{
//如果不存在 存放前缀和,和当前节点,然后继续匹配下一次
map.put(sum,head);
}
}
//最后返回虚拟头结点的下一个节点
return dummy.next;
}
}

写回答

1回答

javaman

2021-11-01

同学您好,看下大体是对的,可以考虑去提交下试试看。

0
0

算法面试刷题课--竞赛命题人带你刷70+高质量题型

只需20小时, Google面试官带你完成Java算法面试准备

539 学习 · 65 问题

查看课程