力扣题目学习笔记(OC + Swift)21. 合并两个有序链表
2023-12-25 05:54:17
21. 合并两个有序链表
链表解题经典三把斧:
- 哑巴节点
- 栈
- 快慢指针
此题比较容易想到的解法是迭代法,生成哑巴节点,然后迭代生成后续节点。
方法一、迭代法
Swift
func mergeTwoLists(_ list1: ListNode?, _ list2: ListNode?) -> ListNode? {
guard list1 != nil else {
return list2
}
guard list2 != nil else {
return list1
}
var list1 = list1
var list2 = list2
let dummyNode = ListNode(-1);
var prev:ListNode? = dummyNode
while list1 != nil && list2 != nil {
if list1!.val < list2!.val {
prev?.next = list1
list1 = list1!.next
}else {
prev?.next = list2
list2 = list2!.next
}
prev = prev?.next
}
prev?.next = (list1 != nil) ? list1 : list2
return dummyNode.next
}
OC
//todo
方法二、递归法
代码简洁、思路清晰、稍占内存的解法。
Swift
func mergeTwoLists(_ list1: ListNode?, _ list2: ListNode?) -> ListNode? {
guard let list1 = list1 else { return list2 }
guard let list2 = list2 else { return list1 }
if list1.val < list2.val {
list1.next = mergeTwoLists(list1.next, list2)
return list1
}else {
list2.next = mergeTwoLists(list1, list2.next)
return list2
}
}
OC
//todo
文章来源:https://blog.csdn.net/zzl819954692/article/details/135188736
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!