首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Swift 合并两个有序链表 - LeetCode

Swift 合并两个有序链表 - LeetCode

作者头像
韦弦zhy
发布2018-12-19 17:14:04
7950
发布2018-12-19 17:14:04
举报

LeetCode

题目: 合并两个有序链表

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

示例:

输入:1->2->4, 1->3->4
输出:1->1->2->3->4->4
代码一 迭代:
/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     public var val: Int
 *     public var next: ListNode?
 *     public init(_ val: Int) {
 *         self.val = val
 *         self.next = nil
 *     }
 * }
 */
class Solution {
  func mergeTwoLists(_ l1: ListNode?, _ l2: ListNode?) -> ListNode? {
    if l1 == nil {
        return l2
    }
    
    if l2 == nil {
        return l1
    }
    var newNode: ListNode? = nil
    var newNode1 = l1
    var newNode2 = l2
    if newNode1!.val < newNode2!.val {
        newNode = newNode1
        newNode1 = newNode1?.next
    } else {
        newNode = newNode2
        newNode2 = newNode2?.next
    }
    
    var tempNode = newNode
    while (newNode1 != nil) && (newNode2 != nil) {
        if newNode1!.val <= newNode2!.val {
            tempNode?.next = newNode1
            newNode1 = newNode1?.next
        } else {
            tempNode?.next = newNode2
            newNode2 = newNode2?.next
        }
        tempNode = tempNode?.next
    }
    
    if newNode1 != nil && newNode2 == nil {
        tempNode?.next = newNode1
    }
    
    if newNode1 == nil && newNode2 != nil {
        tempNode?.next = newNode2
    }
    
    return newNode
  }
}
代码二 递归:
/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     public var val: Int
 *     public var next: ListNode?
 *     public init(_ val: Int) {
 *         self.val = val
 *         self.next = nil
 *     }
 * }
 */
class Solution {
  func mergeTwoLists(_ l1: ListNode?, _ l2: ListNode?) -> ListNode? {
          if l1 == nil && l2 == nil {
        return nil
    }
    
    if l1 == nil || l2 == nil {
        return l1 == nil ? l2 : l1
    }
    
    var newNode: ListNode? = nil
    
    if l1!.val <= l2!.val {
        newNode = l1
        newNode?.next = mergeTwoLists(l1?.next, l2)
    } else {
        newNode = l2
        newNode?.next = mergeTwoLists(l1, l2?.next)
    }
    return newNode  
  }
}
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018.11.27 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 题目: 合并两个有序链表
    • 代码一 迭代:
      • 代码二 递归:
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档