链表 - 简单:合并两个有序链表 By Swift

293 阅读1分钟

题干:将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 

示例:

输入: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;
    }
}