合并两个有序链表

题目信息

将两个升序链表合并为一个新的升序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 
示例:
输入: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
}

题目链接

posted @ 2020-04-21 17:27  木子沉雨  阅读(364)  评论(0编辑  收藏  举报