# Definition for singly-linked list.
# class ListNode:
# def __init__(self, val=0, next=None):
# self.val = val
# self.next = next
class Solution:
def mergeTwoLists(self, l1: Optional[ListNode], l2: Optional[ListNode]) -> Optional[ListNode]:
if l1 is None:
return l2
if l2 is None:
return l1
head1 = l1
head2 = l2
head3 = None
while head1 and head2:
if head1.val == head2.val:
new_node1 = ListNode(head1.val)
new_node1.next = None
new_node2 = ListNode(head2.val)
new_node2.next = None
if head3 is None:
head3 = new_node1
head3.next = new_node2
else:
while head3:
last_node = head3.next
last_node.next = new_node1
last_node.next.next = new_node2
else:
if head1.val > head2.val:
new_node = ListNode(head2.val)
new_node.next = None
head2 = head2.next
else:
new_node = ListNode(head1.val)
new_node.next = None
head1 = head1.next
if head3 is None:
head3 = new_node
else:
while head3:
last_node = head3.next
last_node.next = new_node
continue
head1 = head1.next
head2 = head2.next
return head3