algorithm that merges two sorted linked lists into one sorted linked list tuplesortedlinkedlisttestdataodd tuplesortedtestdataodd true tuplesortedlinkedlisttestdataeven tuplesortedtestdataeven true for i in range3 lensortedlinkedlistrangei i true true true lensortedlinkedlisttestdataodd 8 strsortedlinkedlist strsortedlinkedlisttestdataodd 11 1 0 1 3 5 7 9 strsortedlinkedlisttestdataeven 2 0 2 3 4 6 8 10 ssl sortedlinkedlist merged mergelistsssltestdataodd ssltestdataeven lenmerged 16 strmerged 11 2 1 0 0 1 2 3 3 4 5 6 7 8 9 10 listmerged listsortedtestdataodd testdataeven true tuple sortedlinkedlist test_data_odd tuple sorted test_data_odd true tuple sortedlinkedlist test_data_even tuple sorted test_data_even true for i in range 3 len sortedlinkedlist range i i true true true len sortedlinkedlist test_data_odd 8 str sortedlinkedlist str sortedlinkedlist test_data_odd 11 1 0 1 3 5 7 9 str sortedlinkedlist test_data_even 2 0 2 3 4 6 8 10 ssl sortedlinkedlist merged merge_lists ssl test_data_odd ssl test_data_even len merged 16 str merged 11 2 1 0 0 1 2 3 3 4 5 6 7 8 9 10 list merged list sorted test_data_odd test_data_even true
from __future__ import annotations

from collections.abc import Iterable, Iterator
from dataclasses import dataclass

test_data_odd = (3, 9, -11, 0, 7, 5, 1, -1)
test_data_even = (4, 6, 2, 0, 8, 10, 3, -2)


@dataclass
class Node:
    data: int
    next_node: Node | None


class SortedLinkedList:
    def __init__(self, ints: Iterable[int]) -> None:
        self.head: Node | None = None
        for i in sorted(ints, reverse=True):
            self.head = Node(i, self.head)

    def __iter__(self) -> Iterator[int]:
        
        node = self.head
        while node:
            yield node.data
            node = node.next_node

    def __len__(self) -> int:
        
        return sum(1 for _ in self)

    def __str__(self) -> str:
        
        return " -> ".join([str(node) for node in self])


def merge_lists(
    sll_one: SortedLinkedList, sll_two: SortedLinkedList
) -> SortedLinkedList:
    
    return SortedLinkedList(list(sll_one) + list(sll_two))


if __name__ == "__main__":
    import doctest

    doctest.testmod()
    SSL = SortedLinkedList
    print(merge_lists(SSL(test_data_odd), SSL(test_data_even)))