Python实现链表

Python实现链表的插入,增加,查找,删除,查看长度和打印的方法。

下面展示一些 内联代码片

# time 2021-11-24 1516分
# neil_linch

class Node(object):

    def __init__(self, data, next=None):
        self.data = data
        self.next = next

    def __str__(self):
        return ('当前节点值为:%s' % self.data)


class LinkedList(object):

    def __init__(self, head=None):
        self.head = head

    def __len__(self):
        curr_node = self.head
        counter = 0
        while curr_node is not None:
            counter += 1
            curr_node = curr_node.next
        return counter

    # 在链表前面插入节点
    def insert_to_front(self, data):
        if data is None:
            return None
        # 原来的头结点 , 是新头节点的next
        node = Node(data, self.head)
        self.head = node
        return node

    # 从链表后面插入节点
    def append(self, data):
        if data is None:
            return None
        node = Node(data)
        if self.head is None:
            self.head = node
            return node
        # 从头节点开始寻找当前链表尾指针
        curr_node = self.head
        while curr_node.next is not None:
            curr_node = curr_node.next
        # 链表尾指针指向新插入的node
        curr_node.next = node
        return node

    def find(self, data):
        if data is None:
            return None
        curr_node = self.head
        while curr_node is not None:
            if curr_node.data == data:
                return curr_node
            curr_node = curr_node.next
        return None

    def delete(self, data):
        if data is None:
            return None
        if self.head is None:
            return
        #  当要删除的元素是头节点时
        if self.head.data == data:
            self.head = self.head.next
        prev_node = self.head
        curr_node = self.head.next
        while curr_node is not None:
            if curr_node.data == data:
                prev_node.next = curr_node.next
                return
            prev_node = curr_node
            curr_node = curr_node.next
        return None

    def print_list(self):
        if self.head is None:
            return
        curr_node = self.head
        while curr_node is not None:
            print(curr_node.data)
            curr_node = curr_node.next

    def get_all_data(self):
        if self.head is None:
            return
        curr_node = self.head
        data = []
        while curr_node is not None:
            data.append(curr_node.data)
            curr_node = curr_node.next
        return data


go = LinkedList()

while True:
    num = int(input('请输入1-6:'))
    if num == 1:
        data = input('请输入要插入的data:')
        go.insert_to_front(data)
    elif num == 2:
        data = input('请输入要添加的data:')
        go.append(data)
    elif num == 3:
        data = input('请输入要查找的data:')
        go.find(data)
    elif num == 4:
        data = input('请输入要删除的data:')
        go.delete(data)
    elif num == 5:
        print('查看长度')
        go.print_list()
    elif num == 6:
        print('打印')
        go.get_all_data()
    elif num == 0:
        break
    else:
        print('请输入正确的命令符')

https://www.lanqiao.cn/courses/1512/learning/?id=16644


版权声明:本文为jialingbb原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。