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