📅  最后修改于: 2023-12-03 14:59:02.023000             🧑  作者: Mango
本题要求计算一个链表中所有在 0 和其后续节点之间的节点值的乘积。
输入格式:
ListNode* head
;输出格式:
注意:
首先,遍历一次链表,找到链表中所有值为 0 的节点。对于每个值为 0 的节点,我们需要找到其后续所有不为 0 的节点,然后将它们的值相乘即为该节点的乘积。最后,将所有值为 0 的节点的乘积相乘即为所求。
具体实现可以使用两个指针,分别指向链表的当前节点和下一个节点。如果当前节点的值为 0,则将乘积初始化为 1,然后从当前节点的下一个节点开始,寻找直到下一个不为 0 的节点,期间将该区间内所有节点的值都相乘。找到了该区间后,将乘积叠加到总乘积中并继续向下遍历。如果当前节点的值不为 0,则直接向下遍历。
C++ 代码实现:
int betweenZeroAndNext(ListNode* head) {
int res = 1;
ListNode* cur = head;
while (cur) {
if (cur->val == 0) {
int temp = 1;
ListNode* nxt = cur->next;
while (nxt && nxt->val == 0) nxt = nxt->next;
while (nxt && nxt->val != 0) {
temp *= nxt->val;
nxt = nxt->next;
}
res *= temp;
cur = nxt;
} else {
cur = cur->next;
}
}
return res;
}
Python 代码实现:
def between_zero_and_next(head):
res = 1
cur = head
while cur:
if cur.val == 0:
temp = 1
nxt = cur.next
while nxt and nxt.val == 0:
nxt = nxt.next
while nxt and nxt.val != 0:
temp *= nxt.val
nxt = nxt.next
res *= temp
cur = nxt
else:
cur = cur.next
return res
以上的代码实现中,ListNode
是链表节点的定义,包含两个属性:val
和 next
分别表示节点的值和下一个节点的指针。在 C++ 中,ListNode
的定义如下:
struct ListNode {
int val;
ListNode* next;
ListNode(int x) : val(x), next(NULL) {}
};
在 Python 中,ListNode
的定义如下:
class ListNode:
def __init__(self, x):
self.val = x
self.next = None