单链表(python3)

# 单链表----------------------------------------
class ListNode:  # 单链表的定义
    def __init__(self, value, pointer):
        self.elem = value
        self.next = pointer


class ListHandle:  # 单链表的操作
    def __init__(self):  # 新建单链表
        self.head = None
        self._length = 0

    def is_empty(self):  # 单链表的判空
        # if self.elem is None:
        #     print('单链表为空')
        #     return True
        # else:
        #     print('单链表不为空')
        #     return False
        if self._length == 0:
            print('单链表为空')
            return True
        else:
            print('单链表不为空')
            return False

    def get_length(self):  # 求单链表的长度
        # p = self.head
        # temp = 0
        # while p.next is not None:
        #     temp += 1
        #     p = p.next
        # return temp
        print('单链表的长度为%d' % self._length)
        return self._length

    def add_node(self, value):  # 增加节点
        # if self.elem is None:
        #     list_1 = List(value, None)
        #     return list_1
        # else:
        #     p = self.head
        #     while p.next != 'None':
        #         p = self.next
        #     p.next = List(value, None)
        return

    def ergodic_node(self, value):  # 遍历单链表
        p = self.head
        temp = 1
        while p.next is not None:
            if p.elem == value:
                print('单链表中存在此元素')
                return temp
            temp += 1
            p = p.next
        print('单链表中不存在此元素')
        return False

    def first_insert_node(self, value):  # 首端插入节点
        p_1 = ListNode(value, None)
        p_2 = self.head
        self.head = p_1.elem
        self.head.next = p_2
        self._length = self._length + 1
        return

    def appoint_insert_first_node(self, value, times):  # 在指定位置前插入节点
        if times >= self._length:
            print('错误')
            return
        p_1 = ListNode(value, None)
        temp = 0
        p_2 = self.head
        while p_2.next is not None:
            temp += 1
            p_2 = p_2.next
            if temp == times - 1:
                break
        p_3 = p_2.next
        p_2.next = p_1.elem
        p_1.next = p_3.elem
        self._length = self._length + 1
        return

    def appoint_insert_end_node(self, value, times):  # 在指定位置后插入节点
        if times >= self._length:
            print('错误')
            return
        p_2 = ListNode(value, None)
        p_1 = self.head
        temp = 0
        while p_1.next is not None:
            temp += 1
            p_1 = p_1.next
            if temp == times:
                break
        self._length = self._length + 1
        p_3 = p_2.next
        p_1.next = p_2.elem
        p_2.next = p_3.elem
        return

    def end_insert_node(self, value):  # 尾端插入节点
        p_2 = ListNode(value, None)
        self._length = self._length + 1
        p_1 = self.head
        while p_1 is not None:
            p_1 = p_1.next
        p.next = p_2.elem
        return

    def first_delete_node(self):  # 首端删除节点
        self.head = self.head.next
        self._length = self._length - 1
        return

    def appoint_delete_times_node(self, times):  # 删除指定位置节点
        p_1 = self.head
        temp = 0
        while p_1.next is not None:
            p_1 = p_1.next
            temp += 1
            if temp == times - 1:
                break
        p_2 = p_1.next
        p_1.next = p_2.elem
        self._length = self._length - 1
        return

    def appoint_delete_value_node(self, value):  # 删除指定值节点
        p_1 = self.head
        p_2 = p_1.next
        p_3 = p_2.next
        if value == self.head.elem:
            self.head = self.head.next
            self._length = self._length - 1
        temp = 0
        while p_2.next is not None:
            if p_2.elem == value:
                p_1.next = p_3.elem
                temp += 1
            p_2 = p_2.next
        self._length = self._length - temp
        return

    def end_delete_node(self):  # 尾端删除节点
        p = self.head
        while p.next.next is not None:
            p = p.next
        p.next = None
        p._length = p._length - 1
        return

    def reversal_list(self):  # 反转单链表
        p_1 = self.head
        p = self.head
        p_2 = p_1.next
        p_1.next = None
        while p.next is not None:
            p_2.next = p_1.elem
            p_1 = p_1.next
            p_2 = p_2.next
        p.head = p_2.elem
        return

    def print_all(self):  # 打印单链表的所有项
        p = self.head
        while p.elem is not None:
            print(p.elem)
            p = p.next

    def change_list_array(self):  # 把单链表转为数组输出
        array = []
        p = self.head
        while p.elem is not None:
            array.append(p.elem)
            p = p.next
        return array


if __name__ == "__main__":
    # 创建空表
    list_test = ListNode(None, None)
    # 对表赋值n次
    for i in range(n):
        list_test.next = ListNode(i, None)
        list_test = list_test.next
    # 使用while循环输出单链表
    while list_test.elem is not None:
        print(list_test.elem)
        list_test = list_test.next
    # 打印链表所有项的值
    list_test.print_all()

猜你喜欢

转载自blog.csdn.net/zhangyu4863/article/details/80789245