首页 > 技术文章 > python版单链表实现

childheart 2020-12-30 20:57 原文

单链表由线性的节点组成,每个节点储存一个数据和一个指向下一个数据的指针

# 节点类
class Node:
    def __init__(self, elem):
        self.elem = elem
        self.next = None


# 单链表类
class Single_linked_list:
    def __init__(self):
        self.__head = None

    def is_empty(self):
        '''
        :return: bool
        '''
        return self.__head is None

    def length(self):
        cur = self.__head
        count = 0
        while cur:
            count += 1
            if not cur.next:
                break
            cur = cur.next

        return count

    def travel(self):
        '''
        :return: 打印所有元素
        '''
        cur = self.__head
        while cur:
            print(cur.elem, end=' ')
            cur = cur.next

    def add(self, item):
        node = Node(item)
        node.next = self.__head
        self.__head = node

    def append(self, item):
        '''
        :param item: 添加元素
        :return: None
        '''
        node = Node(item)
        cur = self.__head
        if not cur:
            self.__head = node
        else:
            while cur:
                if not cur.next:
                    cur.next = node
                    break
                cur = cur.next

    def insert(self, index, item):
        '''
        :param index: 插入的索引位置
        :param item: 要插入的数据元素
        :return: None
        '''
        node = Node(item)
        if index <= 0:
            self.add(item)
        elif index >= self.length():
            self.append(item)
        else:
            cur = self.__head
            pre = None
            cur_count = 0
            while cur:
                if cur_count == index:
                    node.next = cur
                    pre.next = node
                pre = cur
                cur = cur.next
                cur_count += 1

    def remove(self, item):
        cur = self.__head
        pre = None
        cur_count = 0
        while cur:
            if cur.elem == item:
                if cur_count == 0:
                    self.__head = cur.next
                    break
                pre.next = cur.next
            pre = cur
            cur = cur.next
            cur_count += 1

    def search(self, item):
        '''
        :param item: 查找元素
        :return: bool
        '''
        cur = self.__head
        while cur:
            if cur.elem == item:
                return True
            cur = cur.next
        return False


if __name__ == '__main__':
    single = Single_linked_list()
    print(single.is_empty())
    single.append(10)
    single.append(20)
    single.append(300)
    single.add(1)
    single.insert(2, 100)
    single.remove(100)
    single.travel()
    print(single.length())
    print(single.search(100))

推荐阅读