题目1: 从链表中删去总和值为零的连续节点
解题思路:
定义一个值为 0
的虚拟头节点,当做原链表新的头节点,dummy.next = head;
定义一个 pre
指针指向虚拟头节点作为原链表头节点的前驱节点(方便进行删除操作)。
定义一个指针 p
指向 pre
指向节点的后一个节点(开始时,p
指向原链表的头节点);
然后 p
指针开始遍历链表,每遍历一个节点就将该节点值与之前节点值总和进行相加得到新的 sum:
若 sum == 0
,则需要进行删除(将 pre
指针和 p
指针指向节点(包括 p
指针指向的节点)中间的节点删除),即pre.next = p.next
然后直接退出循环:
- 若此时
p
指针已经走到了链表的末尾,则令pre
指针后移一位并且p
指向pre<