python单链的增删查改

参考:www.bilibili.com/video/BV1E4…

python实现

class Node:
    def __init__(self, data=0, nextNode=None):
        self.data = data
        self.next = nextNode


class List:
    def __init__(self, head=None):
        self.head = head
        self.length = 0

    def add(self, data):
        if not self.head:
            self.head = Node(data)
        else:
            temp = self.head
            while temp.next:
                temp = temp.next
            temp.next = Node(data)
        self.length += 1
    
    # 删除数据
    def del_data(self, data):
        if self.head:
            if data == self.head.data:
                self.head = self.head.next
            else:
                temp = self.head
                while temp.next:
                    if temp.next.data == data:
                        temp.next = temp.next.next
                        return
                    temp = temp.next
                print("没有找到要删除的节点")
            self.length -= 1
        else:
            print("空链表")

    # 插入
    def insert(self, data, position=0):
        if position > self.length or position < 0:
            print("position的大小必须在{}和{}之间".format(0, self.length - 1))
            return
        if position == 0:
            temp = self.head
            self.head = Node(data)
            self.head.next = temp
        else:
            temp = self.head
            for count in range(position - 1):
                temp = temp.next
            node = Node(data)
            node.next = temp.next
            temp.next = node
        self.length += 1
    
    # 链表反转
    def reverse(self):
        print("reverse")
        if not self.head:
            print("链表为空")
            return
        else:
            pre = None
            temp = self.head
            while temp:
                next_node = temp.next
                temp.next = pre
                pre = temp
                temp = next_node
            self.head = pre

    def print_list(self):
        temp = self.head
        while temp:
            print(temp.data, end="->")
            temp = temp.next
        print()

    def is_exist(self, data):
        temp = self.head
        while temp:
            if data == temp.data:
                print("存在")
                return
            temp = temp.next
        print("不存在")


l = List()
l.add(1)
l.add(2)
l.add(3)
l.del_data(1)
l.del_data(2)
l.add(1)
l.add(2)
l.print_list()
l.insert(4)
l.print_list()
print(l.length)
l.insert(7)
l.print_list()
print(l.length)
l.insert(6, 2)
l.print_list()
print(l.length)
l.is_exist(3)
l.print_list()
l.reverse()
l.print_list()
l.add(8)
l.add(9)
l.print_list()
l.del_data(8)
l.del_data(6)
l.print_list()
l.reverse()
l.print_list()