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

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

0 之间节点的链表和

在一个链表中,每个节点的值都是非负数。现在在这个链表中,添加了一个特殊的节点,它的值为 0。要求使用程序计算出这个链表中从一个非零节点到下一个非零节点之间的所有节点值的和。

方法

首先需要定义链表的结构体:

type ListNode struct {
    Val  int
    Next *ListNode
}

对于这个问题,首先需要找到链表中非零节点的位置,可以通过遍历链表来实现。找到非零节点之后,再找到下一个非零节点,计算这之间的节点值之和。

对于每一对非零节点,可以按照以下方式计算它们之间的节点值之和:

sum := 0
for cur.Next != nil && cur.Next.Val != 0 {
    cur = cur.Next
    sum += cur.Val
}

其中,cur表示当前的节点。

示例

以下是完整的 Go 代码实现:

func getSumOfNonzeroNodes(head *ListNode) int {
    cur := head
    sum := 0
    for cur != nil {
        if cur.Val != 0 {
            sum += cur.Val
            for cur.Next != nil && cur.Next.Val != 0 {
                cur = cur.Next
                sum += cur.Val
            }
        }
        cur = cur.Next
    }
    return sum
}

接下来,可以通过以下方式来测试这个函数:

func TestGetSumOfNonzeroNodes(t *testing.T) {
    head := &ListNode{
        Val: 0,
        Next: &ListNode{
            Val: 1,
            Next: &ListNode{
                Val: 2,
                Next: &ListNode{
                    Val: 0,
                    Next: &ListNode{
                        Val: 3,
                        Next: &ListNode{
                            Val: 0,
                            Next: &ListNode{
                                Val: 4,
                                Next: &ListNode{
                                    Val: 5,
                                    Next: nil,
                                },
                            },
                        },
                    },
                },
            },
        },
    }

    sum := getSumOfNonzeroNodes(head)
    if sum != 15 {
        t.Errorf("getSumOfNonzeroNodes() = %d; want 15", sum)
    }
}

在这个测试用例中,链表中的非零节点为 1、2、3、4 和 5,它们之间的和为 15。

总结

本文介绍了如何计算链表中从一个非零节点到下一个非零节点之间的所有节点值的和。这个问题可以通过遍历链表,找到非零节点并计算它们之间的节点值之和来解决。