输入两个递增排序的链表,合并这两个链表并使新链表中的节点仍然是递增排序的。
示例1:
输入:1->2->4, 1->3->4
输出:1->1->2->3->4->4
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/he-bing-liang-ge-pai-xu-de-lian-biao-lcof
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
实现的思考步骤
- 肯定双指针了
- 指针拆分麻烦,不如创建个链表,比较两个链表的值
- 在前面有个头指针,这很巧妙
实现代码
/**
* Definition for singly-linked list.
* type ListNode struct {
* Val int
* Next *ListNode
* }
*/
func mergeTwoLists(l1 *ListNode, l2 *ListNode) *ListNode {
if l1 == nil {
return l2
}
if l2 == nil {
return l1
}
res := &ListNode{}
// 记录头指针
head := res
for {
if l1 == nil {
res.Next = l2
break
}
if l2 == nil {
res.Next = l1
break
}
if l1.Val < l2.Val {
res.Next = &ListNode{
Val: l1.Val,
Next: nil,
}
l1 = l1.Next
} else {
res.Next = &ListNode{
Val: l2.Val,
Next: nil,
}
l2 = l2.Next
}
res = res.Next
}
return head.Next
}