解题思路:
参考leetcode上面的解法,采用双指针方式,依次循环遍历的方式,及时删除相关节点。
1、p从第一个节点开始,依次跟后续节点求助,如果依次求和不为0,那么p后移动一个节点 p = p -> next。
2、如果从p开始的第n个节点q求和为0,那么p->next直接指向q->next节点。
struct ListNode* removeZeroSumSublists(struct ListNode* head){
struct ListNode *pre = (struct ListNode *) malloc (sizeof(struct ListNode));
pre -> val = 0;
pre -> next = head;
struct ListNode *p = pre;
while(p){
int count = 0;
struct ListNode *q = p -> next;
while(q){
count += q->val;
if(count == 0){
p->next = q->next;
}
q = q -> next;
}
p = p->next;
}
return pre->next;
}