最开始也不知道怎么想的,就想到直接插入排序,默认第一个位置是有序的,依次往这个位置插入,写出了下面的算法:
感觉有点傻,但是没有多余空间消耗
func mergeTwoLists(l1 *ListNode, l2 *ListNode) *ListNode {
if l1 == nil && l2 == nil{
return nil
}
if l1 == nil{
return l2
}
if l2 == nil{
return l1
}
head := l1;
if l1.Val > l2.Val{
head = l2
}
p, p1 := l1, l1
q := l2
for p != nil && q != nil{
if p.Val > q.Val{
t := q
q = q.Next
if p == p1{
p1 = t
p1.Next = p
}else{
t.Next = p
p1.Next = t
p1 = t
}
}else{
if p1 == l1 && p == l1 {
p = p.Next
}else{
p = p.Next
p1 = p1.Next
}
}
}
if q != nil{
p1.Next = q
}
return head
}
看了下别人说的哨兵方法,感觉真的是太完美了,思路整体上也一样,只是少了