Leetcode brushing record-21. Fusionner deux listes chaînées ordonnées

Insérez la description de l'image ici

Le sujet est relativement simple.
Mon idée est la suivante:
définissez deux pointeurs
l1 et l2
pour pointer vers le nœud suivant des deux listes liées.
Commencez par vous engager dans un faker de nœud principal virtuel.
Définissez le nœud principal faker ci-dessus sur lastnode.
Ensuite, comparez l1 et l2
Utilisez le plus petit comme nœud principal.
Déplacez le pointeur correspondant vers le plus petit.
S'ils sont égaux, organisez d'abord les deux nœuds égaux, puis déplacez les deux pointeurs vers l'arrière.

Enfin, lorsqu'un pointeur pointe sur Aucun, pointez le prochain de lastnode sur un autre pointeur et
revenez au nœud principal

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

class Solution:
    def mergeTwoLists(self, l1: ListNode, l2: ListNode) -> ListNode:

        faker = ListNode(0)
        lastnode = faker
        while l1 is not None and l2 is not None:#l1和l2都不是各自链表的末尾
            if l1.val == l2.val:
                lastnode.next = ListNode(l1.val)
                lastnode.next.next = ListNode(l2.val)
                lastnode = lastnode.next.next
                l1 = l1.next
                l2 = l2.next
            elif l1.val < l2.val:#l1小,先录入l1
                lastnode.next = ListNode(l1.val)
                lastnode = lastnode.next
                l1 = l1.next
            elif l2.val < l1.val:
                lastnode.next = ListNode(l2.val)
                lastnode = lastnode.next
                l2 = l2.next
        if l1 is None and l2 is not None:
            lastnode.next = l2
        elif l2 is None and l1 is not None:
            lastnode.next = l1
        return faker.next
Publié 43 articles originaux · loué 14 · 20 000+ vues

Je suppose que tu aimes

Origine blog.csdn.net/weixin_41545780/article/details/105331301
conseillé
Classement