根据提供的代码,访问空指针的原因是没有正确检查链表是否为空。在 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助手提供,问题来源于学员提问




