Leetcode brushing record-21. Combinar dos listas vinculadas ordenadas

Inserte la descripción de la imagen aquí

El tema es relativamente simple.
Mi idea es:
establecer dos punteros
l1 y l2
para que apunten al siguiente nodo de las dos listas vinculadas.
Primero participar en un simulador de nodo de cabeza virtual.
Establecer el nodo de cabeza de faker anterior para el último nodo.
Luego, comparar l1 y l2.
Use el más pequeño como nodo principal.
Mueva el puntero correspondiente de regreso al más pequeño.
Si son iguales, coloque primero los dos nodos iguales y mueva ambos punteros hacia atrás.

Finalmente, cuando un puntero apunta a Ninguno, apunte el siguiente del último nodo a otro puntero y
regrese al nodo 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
Publicado 43 artículos originales · elogiado 14 · 20,000+ visitas

Supongo que te gusta

Origin blog.csdn.net/weixin_41545780/article/details/105331301
Recomendado
Clasificación