先读题:
代码如下:
func mergeTwoLists(list1 *ListNode, list2 *ListNode) *ListNode {
p1 := list1
p2 := list2
var list3 *ListNode //新链表头
var p3 *ListNode
if p1 == nil {
return p2
}
if p2 == nil {
return p1
}
if p1.Val < p2.Val {
list3 = p1 //赋值list3
p1 = p1.Next
} else {
list3 = p2
p2 = p2.Next
}
p3 = list3 //p3指向list3的地址,之后更新p3
for p1 != nil && p2 != nil { //两个链表当前指针p1、p2非空
if p1.Val < p2.Val {
p3.Next = p1 //p3的后驱节点指向p1
p1 = p1.Next //p1往后挪
} else {
p3.Next = p2
p2 = p2.Next
}
p3 = p3.Next //p3往后挪
}
//任意一条链表为空,跳出以上for循环
//直接将p3的后驱指针指向 非空链表的指针
if p1 == nil {
p3.Next = p2
} else {
p3.Next = p1
}
return list3 //返回头节点
}
用时较短,骄傲.jpg。