将数组转换为Golang的链接列表

发布于 2025-01-28 18:35:58 字数 1177 浏览 4 评论 0原文

链接列表的定义:

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]

definition of linked list:

type ListNode struct {
    Val  int
    Next *ListNode
}

insert helper that does the pointer manipulation:
I am aware that root.Val == 0 is does not solve problems where the input array contains 0 elements, so please suggest a more general approach to solve this.

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
}

The main functionality:

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

A string function implementation to test the function:

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)

}

My main function to replicate output:

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

Output:

[1]

Expected Output:

[1 2 3 4 5]

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

墨落画卷 2025-02-04 18:35:58

您必须更改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
}

You have to change your convertToList and insert functions as:

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
}

and convertToList:

func convertToList(arr []int) *ListNode {
    var head *ListNode
    for _, val := range arr {
        head = insert(head, val)
    }
    return head
}
撕心裂肺的伤痛 2025-02-04 18:35:58

更改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
}

请参阅此类似:链接列表有关更多信息

Change 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
}

And insert:

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

See this like : linked list for more information

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文