给你一个链表的头节点 head,请你编写代码,反复删去链表中由 总和 值为 0 的连续节点组成的序列,直到不存在这样的序列为止。
删除完毕后,请你返回最终结果链表的头节点。
简要题解;
暴力遍历每一段然后当前段为0的话就把段头指针指向段尾的下一个节点。代码如下:
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
ListNode* removeZeroSumSublists(ListNode* head) {
ListNode* cur=new ListNode(0);
ListNode* pre=cur;
cur->next=head;
while(cur!=NULL)
{
ListNode *tem=cur->next;
int sum=0;
while(tem!=NULL)
{
sum+=tem->val;
tem=tem->next;
if(sum==0)
{
cur->next=tem;
break;
}
}
if(tem==NULL) cur=cur->next;
}
return pre->next;
}
};