📜  0之间节点的链表积(1)

📅  最后修改于: 2023-12-03 14:59:02.023000             🧑  作者: Mango

题目介绍

本题要求计算一个链表中所有在 0 和其后续节点之间的节点值的乘积。

输入格式:

  • 链表头节点的指针 ListNode* head

输出格式:

  • 一个整数,表示所求链表中所有 0 和其后续节点之间的节点值的乘积。

注意:

  • 链表中可能存在值为 0 的节点;
  • 如果链表中除了头节点以外的所有节点值都在 0 和其后续节点之间,那么输出 1;

解题思路

首先,遍历一次链表,找到链表中所有值为 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 是链表节点的定义,包含两个属性:valnext 分别表示节点的值和下一个节点的指针。在 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