【问题标题】:Converting an array into a linked list in Golang在 Golang 中将数组转换为链表
【发布时间】:2022-06-30 18:05:45
【问题描述】:

链表的定义:

type ListNode struct {
    Val  int
    Next *ListNode
}

插入进行指针操作的助手: 我知道 root.Val == 0 不能解决输入数组包含 0 个元素的问题,所以请提出更通用的方法来解决这个问题。

func insert(root *ListNode, elem int) *ListNode {
    temp := ListNode{Val: elem, Next: nil}
    if root.Val == 0 {
        root = &temp
    } else {
        curr := root
        for curr.Next != nil {
            curr = curr.Next
        }
        curr = &temp
    }
    return root
}

主要功能:

func convertToList(arr []int) *ListNode {
    var head ListNode
    for _, val := range arr {
        head = *insert(&head, val)
    }
    return &head
}

测试函数的字符串函数实现:

func (l *ListNode) String() string {
    x := make([]int, 0)
    curr := l
    for curr != nil {
        x = append(x, curr.Val)
        curr = curr.Next
    }
    return fmt.Sprint(x)

}

我复制输出的主要功能:

func main() {
    arr := []int{1, 2, 3, 4, 5}
    listNode := convertToList(arr)
    fmt.Println(listNode.String())
}

输出:

[1]

预期输出:

[1 2 3 4 5]

【问题讨论】:

    标签: arrays go linked-list reference


    【解决方案1】:

    您必须将 convertToListinsert 函数更改为:

    func insert(root *ListNode, elem int) *ListNode {
        temp := ListNode{Val: elem, Next: nil}
        if root == nil {
            root = &temp
            return root
        }
        curr := root
        for curr.Next != nil {
            curr = curr.Next
        }
        curr.Next = &temp
        return root
    }
    

    convertToList:

    func convertToList(arr []int) *ListNode {
        var head *ListNode
        for _, val := range arr {
            head = insert(head, val)
        }
        return head
    }
    

    【讨论】:

    • 您的插入函数确实使它工作,但是 convertToList 并没有因为某种原因终止它。你也是这样吗?
    【解决方案2】:

    更改convertToList

    func convertToList(arr []int) *ListNode {
        head := new(ListNode)
        if len(arr) == 0 {
            return head
        }
        head.Val = arr[0]
        head.Next = nil
    
        last := head
        for i := 1; i < len(arr); i++ {
            last = insert(last, arr[i])
        }
        return head
    }
    

    还有insert:

    func insert(last *ListNode, val int) *ListNode {
        temp := new(ListNode)
        temp.Val = val
        temp.Next = nil
        last.Next = temp
        return last.Next
    }
    

    更多信息请见:linked list

    【讨论】:

      猜你喜欢
      • 2015-05-15
      • 1970-01-01
      • 2017-04-28
      • 1970-01-01
      • 2019-11-27
      • 1970-01-01
      • 1970-01-01
      • 2020-04-17
      • 1970-01-01
      相关资源
      最近更新 更多