python链表2

class Node:
    def __init__(self, value=None, next=None):
        self.value = value
        self.next = next


class LinkedList(object):

    def __init__(self):
        # 初始化链表时, 创建一个head节点,该节点的value和next都为None
        # head的value值是啥无所谓
        # 注意, 不要把链表的head节点和head节点指向的下一个节点看着是一个节点
        # head.next 才是链表的第一个节点
        # head是链表的一个属性
        # 遍历链表时都是从 head.next 开始的
        node = Node()
        self.head = node

    # 头插法, 在链表的头部插入一个新的节点
    def add_first(self, value):
        node = Node(value)
        node.next = self.head.next  # 把第一个节点self.head.next,作为新节点的next
        self.head.next = node  # 第一个节点为新节点, head指向新节点

    # 在尾部添加一个元素
    def add_last(self, value):
        node = Node(value)
        # 空链表
        if self.head.next is None:
            self.head.next = node
        # 非空链表
        else:
            # 从第一个节点开始遍历, 直到最后一个节点
            current = self.head.next
            while current.next: # 注意这里是current.next,因为后面使用了current.next
                current = current.next
            current.next = node

    def remove_first(self):
        self.head.next = self.head.next.next

    def __str__(self):
        current = self.head.next
        while current:
            print(current.value, end='\t')
            current = current.next
        return ''


def merge_sort_linked_list(l1, l2):
    dummy = cur = Node()
    while l1 and l2:
        if l1.value < l2.value:
            cur.next = l1
            l1 = l1.next
        else:
            cur.next = l2
            l2 = l2.next
        cur = cur.next
    cur.next= l1 or l2
    return dummy.next

 

posted @ 2020-04-28 08:46  ilovetesting  阅读(271)  评论(0编辑  收藏  举报