题目信息
将两个升序链表合并为一个新的升序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。
示例:
输入:1->2->4, 1->3->4
输出:1->1->2->3->4->4
解题思路
创建一个头部指针pHead,比较两个传入链表的头指针的数据大小,将pHead的next指针指向较小数据链表的数据,并将该该链表的next后移,直到两个列表都不为空。
代码
public class ListNode {
public var val: Int
public var next: ListNode?
public init(_ val: Int) {
self.val = val
self.next = nil
}
}
func mergeTwoLists(_ l1: ListNode?, _ l2: ListNode?) -> ListNode? {
var list1 = l1
var list2 = l2
// 创建头部指针
let pHead = ListNode(-1)
var preN = pHead
// 当两个链表都不为空时执行
while list1 != nil && list2 != nil {
// 当前指针指向较小数据的链表,并将该链表的指针后移
if list1!.val < list2!.val {
preN.next = list1
list1 = list1?.next
}
else {
preN.next = list2
list2 = list2?.next
}
preN = preN.next!
}
// 将不为空的链表拼接到新创建的链表中
preN.next = (list1 == nil ? list2 : list1)
return pHead.next
}