Leetcode 021 合并2个有序链表 思路详解+反思易错 Python实现

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

示例:

输入:1->2->4, 1->3->4
输出:1->1->2->3->4->4


思路:这道题的思路再明显不过了,就是选择一条主链表,同时设置2个指针分别指向2个链表。if判断节点值的大小,通过指针的操作使主链表不断增长。


代码 beat 90

# Definition for singly-linked list.
class ListNode:
    def __init__(self, x):
        self.val = x
        self.next = None

class Solution:
    def mergeTwoLists(self, l1, l2):
        """
        :type l1: ListNode
        :type l2: ListNode
        :rtype: ListNode
        """
        i = l1
        j = l2
        head = l1
        #判断2条链表中某条链表为空的情况
        if l1 is None:
            return l2
        if l2 is None:
            return l1
        #接下来这一段是在操作什么呢?是在给我们的主链i的原头部节点前加节点
        if j.val < i.val:
            head = j
            while j.next is not None and j.next.val <= i.val:
                j = j.next
            t = j
            j = j.next
            t.next = i
        #i链前的节点加完了,接下来把大于i节点的节点也加入主链
        while i != None and j != None:
            if i.next != None:
                if i.next.val > j.val:
                    t = j
                    j = j.next
                    t.next = i.next
                    i.next = t
                    i = i.next
                else:
                    i = i.next
            else:
                i.next = j
                break
                    

        return head
反思易错:

1.链表的题,需考虑极端情况,比如头部和尾部

这道题关于头部的特殊情况就是当我们往主链头部之前加新节点时,我们改的是新节点的next,让它指向原头部节点

而在中间部分修改时,改的是i指针的next


尾部的特殊情况一直都是越界。

猜你喜欢

转载自blog.csdn.net/weixin_41958153/article/details/80721941
今日推荐