面试题25. 合并两个排序的链表
输入两个递增排序的链表,合并这两个链表并使新链表中的节点仍然是递增排序的。
示例1:
输入:1->2->4, 1->3->4
输出:1->1->2->3->4->4
限制:
0 <= 链表长度 <= 1000
/**
* Definition for singly-linked list.
* type ListNode struct {
* Val int
* Next *ListNode
* }
*/
func mergeTwoLists(l1 *ListNode, l2 *ListNode) *ListNode {
//有一个空链表,就可以直接返回
if l1 ==nil{
return l2
}else if l2==nil{
return l1
}
//一个头指针返回结果,一个临时指针一路走下去
var head *ListNode
temp :=&ListNode{0, nil}
if l1.Val<l2.Val{
temp.Val=l1.Val
head=temp
l1=l1.Next
}else{
temp.Val=l2.Val
head=temp
l2=l2.Next
}
for{
if l1==nil || l2==nil{
break
}
if l1.Val<l2.Val{
temp.Next=&ListNode{Val:l1.Val, Next:nil}
l1=l1.Next
}else{
temp.Next=&ListNode{Val:l2.Val, Next:nil}
l2=l2.Next
}
temp=temp.Next
}
for{
if l1==nil{
break
}
//注意必须先给到下一个指针值,再temp=temp.Next,好好理解,不然只打印一个值出来
temp.Next=&ListNode{l1.Val, nil}
l1=l1.Next
temp=temp.Next
}
for{
if l2==nil{
break
}
temp.Next=&ListNode{l2.Val, nil}
l2=l2.Next
temp=temp.Next
}
return head
}