插入一个简单的单链表

awm:

我正在尝试解决Go语言中的leetcode问题,以自学语言。我有一个链表和一个插入函数:

type ListNode struct {
    Val int
    Next * ListNode
}


func Insert(listNode * ListNode, i int) {
    // @fixme how to check the first node?
    if listNode == nil {
        listNode.Val = i
        listNode.Next = nil
    } else {
        for;;
        listNode = listNode.Next {
            if listNode.Next == nil {
                listNode.Next = & ListNode {
                    i, nil
                }
                break
            }
        }
    }
}

func main() {

    vals: = [] int {
            1, 2, 3, 4, 5
        }
    var list ListNode
    for _,
    i: = range vals {
        Insert( & list, i)
    }
}

问题在于,当实例化ListNode的实例时,结构字段具有零值,并且由于无法检查,因此无法更新列表的设置的第一个元素。换句话说,一个ListNode项目已初始化但为空。因此,当我想要建立清单时1->2->3->4->5,最终会得到:0->1 ->2 ...5局限性是我无法更改结构定义,因为leetcode已经定义了该结构。这是上面代码的工作示例:https : //play.golang.org/p/bIz-VjY1PS7

最佳:

您应该做的是不ListNode应该使用*ListNode,而应该使用,这样一个空列表用表示nil *ListNode

func New() *ListNode {
    return nil
}

func Insert(listNode *ListNode, i int) *ListNode {
    // If it's nil, create it
    if listNode == nil {
        listNode = &ListNode{i, nil}
    } else {
        l := listNode
        for ; l.Next != nil; l = l.Next {
        }
        l.Next = &ListNode{i, nil}
    }
    return listNode
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章