美文网首页
合并有序链表

合并有序链表

作者: 梁森的简书 | 来源:发表于2021-06-07 20:45 被阅读0次

思路

  1. 获取两个有序链表的头节点,并将新链表的头节点和尾节点指向较小的节点
  2. 使用while循环比较两个链表的节点大小(比较规则:如果链表A的节点a比链表B的节点b大,那么b = b.next,反之a = a.next),并把较小的节点放到新链表的尾部
  3. 如果某个链表中的所有节点都被添加到了新链表中,那么直接将另一个链表剩余的所有节点按序添加到新链表尾部

核心代码:

private func merge(head1: inout Node?, head2: inout Node?) -> Node? {
        if head1 == nil && head2 == nil {
            return nil
        }
        if head1 == nil {
            return head2
        }
        if head2 == nil {
            return head1
        }
        
        var newHead = Node(item: nil, next: nil)
        var newFooter = Node(item: nil, next: nil)
        // 新头节点、尾节点指向两个链表首节点最小的节点
        if (head1?.item ?? "").compare(head2?.item ?? "") == .orderedDescending{
            newHead = head2!
            newFooter = head2!
            head2 = head2?.next
        } else {
            newHead = head1!
            newFooter = head1!
            head1 = head1?.next
        }
        // 循环比较,将两个链表中最小的节点插入新链表的尾部
        while head1?.next != nil && head2?.next != nil {
            if (head1?.item ?? "").compare(head2?.item ?? "") == .orderedDescending{
                newFooter.next = head2!
                newFooter = head2!
                head2 = head2?.next
            } else {
                newFooter.next = head1!
                newFooter = head1!
                head1 = head1?.next
            }
        }
        // 如果其中一个链表的所有元素结束的比较,直接将另一个链表剩余的所有节点按序添加到新链表尾部
        if head1?.next == nil {
            newFooter.next = head2
        } else {
            newFooter.next = head1
        }
        return newHead
    }

demo地址:https://github.com/yangguanghei/studyDateStructure

相关文章

  • leecode刷题(23)-- 合并两个有序链表

    leecode刷题(23)-- 合并两个有序链表 合并两个有序链表 将两个有序链表合并为一个新的有序链表并返回。新...

  • 2018-12-26

    问题列表 合并两个有序链表 合并K个排序链表 合并区间 插入区间 问题与反馈 总结与收获 多个有序链表的合并,类似...

  • 合并单链表

    合并两个有序链表非递归实现 合并两个有序链表递归实现

  • leetcode 链表 [C语言]

    21. 合并两个有序链表 合并两个有序链表 61. 旋转链表 (快慢指针) 61. 旋转链表 相关标签 : 链表 ...

  • ARTS-Week6 有序链表合并、DevOps、Json解析、

    Algorithm LeetCode原题链接: 合并两个有序链表 将两个有序链表合并为一个新的有序链表并返回。新链...

  • LeetCode-21-合并两个有序链表

    LeetCode-21-合并两个有序链表 题目 将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的...

  • 21. 合并两个有序链表

    20180923-摘抄自21. 合并两个有序链表 将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定...

  • 2022-02-23 链表专栏

    链表基础 类别 1、合并两个有序链表2、合并 k 个有序链表3、寻找单链表的倒数第 k 个节点4、寻找单链表的中点...

  • leetcode的题目21

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

  • Swift 合并两个有序链表 - LeetCode

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

网友评论

      本文标题:合并有序链表

      本文链接:https://www.haomeiwen.com/subject/gpfceltx.html