• 【剑指】25.合并有序链表 & 21. Merge Two Sorted Lists


    21. Merge Two Sorted Lists

    递归

    不需要dummy head, 因为可以确定是返回哪个头节点

    func mergeTwoLists(l1 *ListNode, l2 *ListNode) *ListNode {
        if l1 ==nil{
            return l2
        }
        if l2 == nil{
            return l1
        }
        // 1-3 2-4 
        var head *ListNode
        if l1.Val < l2.Val{
            head = l1
            // in 1(head) (3 2-4)
            newHead := mergeTwoLists(l1.Next,l2)
            // out sub 1 (2-3-4)
            // sub to father 1->(2-3-4)
            head.Next = newHead
        }else{
            head = l2
            newHead := mergeTwoLists(l1,l2.Next)
            head.Next = newHead
        }
        return head
    }
    

    https://leetcode-cn.com/submissions/detail/57614448/

    迭代

    Q: 为什么迭代解法需要用dummy
    A: 如果不用dummy,那么往新链表添加节点就用2种情况: 空链表添加节点 和 非空链表添加节点,这就产生了2套添加逻辑,所以可以通过添加dummy统一为非空链表添加节点。

    func mergeTwoLists(l1 *ListNode, l2 *ListNode) *ListNode {
        dummy := &ListNode{}
        cur := dummy // x(cur,dummy) // cur:在循环过程中,cur指向新链表的尾节点
        for l1!=nil && l2!=nil { // 1-nil 2-nil
            if l1.Val < l2.Val{
                cur.Next = l1 // x-1
                l1 = l1.Next
            }else{
                cur.Next = l2 
                l2 = l2.Next
            }
            cur = cur.Next // x-1(cur)
        }
        if l1 !=nil{
            cur.Next = l1
        }
         if l2 !=nil{
            cur.Next = l2
        }
        return dummy.Next
    }
    
    • 规律总结
      总结删除链表节点和合并有序链表的迭代解法,可以得出以下规律:
      链表题目中, 删除节点和添加节点 各自都会面临2种处理逻辑 删除节点(头节点,中间节点) 添加节点(空链表,非空链表), 此时可以用dummy head统一为一种处理逻辑。
      进一步提炼共同点, 似乎就是当不能确定要返回的链表头节点是哪个时,可能就需要dummy节点。 // 参考附录1视频
    1. [参考合并有序链表,使用迭代解法, 如何想到要引入dummy head](https://leetcode-cn.com/problems/merge-two-sorted-lists/solution/javashi-pin-jiang-jie-xi-lie-merge-two-sorted-list/ 1分50秒)
  • 相关阅读:
    第四周作业
    第四周上机作业
    java第十周上机练习
    java第九周上机练习
    第八周作业
    java第八周上机练习
    java第七周作业
    java第七周上机练习
    java第六周作业
    java上机练习 4.9
  • 原文地址:https://www.cnblogs.com/yudidi/p/12565622.html
Copyright © 2020-2023  润新知