题干:将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。
示例:
输入:1->2->4, 1->3->4
输出:1->1->2->3->4->4
思路:本题主要考察的是链表中指针的使用,可由以下三步解决:
- 声明哨兵节点。
- 遍历链表,将两个链表的节点依次放到目标链表。
- 将遍历完不为空的链表直接连接到目标链表尾部。
代码:
class Solution {
func mergeTwoLists(_ l1: ListNode?, _ l2: ListNode?) -> ListNode? {
if l1 == nil { return l2 }
if l2 == nil { return l1 }
// 声明哨兵节点
let resultDummy: ListNode? = ListNode(0)
var cur = resultDummy
var temp1 = l1
var temp2 = l2
// 遍历链表
while temp1 != nil && temp2 != nil {
var val = 0
if temp1!.val > temp2!.val {
val = temp2!.val
temp2 = temp2?.next
} else {
val = temp1!.val
temp1 = temp1?.next
}
cur?.next = ListNode(val)
cur = cur?.next
}
// 不为空的链表直接链到目标链表尾部
cur?.next = temp1 != nil ? temp1 : temp2
return resultDummy?.next;
}
}