链表删去和为零的连续节点
给你一个链表的头节点 head,请你编写代码,反复删去链表中由 总和 值为 0 的连续节点组成的序列,直到不存在这样的序列为止。删除完毕后,请你返回最终结果链表的头节点。
题解:要求删除一个连续节点和为0的组成的序列,
一、设置一个带头结点的链表指向当前链表
二、利用三指针的方式操作p指针指向当前节点,q指针表示从当前节点开始向后遍历
三、遍历条件(sum0||q.next!=null)
如果sum0则让h的next指向当前q的next(中间和为0的序列删除)
如果遍历结束sum!=0说明以当前节点往后遍历的没有sum==0的,那么久跳到一下个节点继续
时间复杂度:O(N*N)
控件复杂度O(1)
public class removeZeroSumSublists {
public static ListNode removeZeroSumSublists(ListNode head){
//生成带头节点的链表
ListNode dummy=new ListNode(0);
dummy.next=head;
ListNode h=dummy;
while (h.next!=null){
ListNode p=h.next;
ListNode q=p;
int sum=p.val;
while (q.next!=null||sum==0){
if (sum==0){
h.next=q.next;
break;
}
q=q.next;
sum+=q.val;
}
if (sum!=0){
h=h.next;
}
}
return dummy.next;
}
}