📌  相关文章
📜  链表交替节点的乘积(1)

📅  最后修改于: 2023-12-03 15:12:32.444000             🧑  作者: Mango

链表交替节点的乘积

在本篇文章中,我们将探讨如何实现链表交替节点的乘积。首先,让我们看一下题目的详细描述:

给定一个链表,交替节点的乘积即为链表中相邻两个节点数字之积的总和,如果链表节点个数是单数,则最后一个节点不参与计算。

例如,在链表1->2->3->4->5中,交替节点的乘积为(1*2)+(3*4)=14;在链表1->2->3->4->5->6中,交替节点的乘积为(1*2)+(3*4)+(5*6)=44

实现思路

为了计算链表交替节点的乘积,我们可以使用两个指针分别指向链表的相邻两个节点,遍历整个链表,每次计算两个节点的乘积,并将结果加到总和中。需要注意的是,如果链表节点个数是单数,则最后一个节点不参与计算。

下面是具体的实现代码:

class ListNode:
    def __init__(self, val=0, next=None):
        self.val = val
        self.next = next

def alternate_product(head: ListNode) -> int:
    if not head or not head.next:
        return 0

    cur = head
    nxt = head.next
    res = 0

    while nxt:
        res += cur.val * nxt.val
        cur = nxt.next
        if not cur:
            break
        nxt = cur.next

    return res

# 测试示例
if __name__ == "__main__":
    n1 = ListNode(1)
    n2 = ListNode(2)
    n3 = ListNode(3)
    n4 = ListNode(4)
    n5 = ListNode(5)
    n6 = ListNode(6)

    n1.next = n2
    n2.next = n3
    n3.next = n4
    n4.next = n5
    n5.next = n6

    print(alternate_product(n1)) # 输出44
复杂度分析

我们只需要遍历整个链表一次,所以时间复杂度为O(n),其中n为链表中节点的数量。空间复杂度为O(1),因为我们只使用了常数级别的变量来保存数据。