ZBLOG

/** * Definition for singly-linked list. * type ListNode struct { * Val int * Next *ListNode * } */ type Element struct { node *ListNode } type PQueue []Element func (this PQueue) Less(i, j int) bool { return this[i].node.Val...

根据提供的代码,访问空指针的原因是没有正确检查链表是否为空。在 mergeKLists 函数中,你需要在将链表加入优先队列之前进行非空检查。

修改后的代码如下所示:

func mergeKLists(lists []*ListNode) *ListNode {
    k := len(lists)
    PQ := &PQueue{}
    
    for i := 0; i < k; i++ {
        if lists[i] != nil { // 检查链表是否为空
            heap.Push(PQ, Element{node: lists[i]})
        }
    }
    
    head := &ListNode{}
    node := head
    
    for PQ.Len() != 0 {
        tmp := heap.Pop(PQ).(Element)
        node.Next = tmp.node
        node = node.Next
        
        if tmp.node.Next != nil {
            heap.Push(PQ, Element{node: tmp.node.Next})
        }
    }
    
    return head.Next
}

通过在插入链表之前进行非空检查,可以避免处理空指针错误。这样修改后的代码应该能够正常地合并 k 个有序链表。


内容由零声教学AI助手提供,问题来源于学员提问

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://golang.0voice.com/?id=11003

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?