代码之家  ›  专栏  ›  技术社区  ›  Laureano Oliva

有可能在goLang中的循环中创建新的链表节点吗?

  •  0
  • Laureano Oliva  · 技术社区  · 2 年前

    我需要为链表创建一个节点,并返回函数内部的头。

    每个节点的定义:

    type ListNode struct {
        Val  int
        Next *ListNode
    }
    
    

    这是功能:

    
    func addTwoNumbers(l1 *ListNode, l2 *ListNode) []string {
    
        calculateValue := func(l *ListNode) int {
            var sumsum int
            element := l
            weight := 1
            for element != nil {
                sumsum = sumsum + element.Val*weight
                weight = weight * 10
                element = element.Next
            }
            return sumsum
        }
    
        numstr := strconv.Itoa(calculateValue(l1) + calculateValue(l2))
    
        listsum := strings.Split(numstr, "")
    
        return listsum
    
    }
    

    现在,函数返回一个字符串列表,每个字符串都应该分配给 Val 在每个节点中。(Val是一个整数,现在列表是字符串,我稍后可以处理)。

    因此,我们的想法是用for循环迭代列表,创建节点并在for中将它们链接在一起。它看起来像这样(里面 addTwoNumbers 返回之前):

        for _, element := range listsum{
            
    
        }
    

    有办法做到这一点吗?

    0 回复  |  直到 2 年前
        1
  •  0
  •   medasx    2 年前

    评论中提到的解决方案

    // create head with the value from first element
    head := &ListNode{ Val: listSum[0] }
    
    tail := head
    // range remaining values
    for _, sum := range listSum[1:] {
        node := &ListNode{ Val: sum }
        tail.Next = node // append node to list
        tail = node // change tail pointer to currently added node
    }