这段代码实现了一个链表的基本操作,包括判空、建表、求长度、展示链表、查找位置、删除节点和插入节点等功能。

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


class LinkList(object):
    def __init__(self):
        self.head = Node()

    def empty(self):
        '判空'
        if self.head.next is None:
            return True
        else:
            return False

    def create(self, data=None):
        '头插法建表'
        node = Node(data)
        if self.length() >= 1:
            node.next = self.head.next
            self.head.next = node
        else:
            self.head.next = node

    def length(self):
        '求链表长度'
        p = self.head.next
        cnt = 0
        while p is not None:
            cnt += 1
            p = p.next
        return cnt

    def display(self):
        '展示链表'
        p = self.head.next
        while p is not None:
            print(p.data, end='  ')
            p = p.next

    def locating(self, data=None):
        '查找位置'
        p = self.head.next
        cnt = 0
        while p is not None:
            cnt += 1
            if data == p.data:
                return cnt
            p = p.next
        else:
            print('此人不在表内。')

    def delete(self, data=None):
        '删除结点'
        p = self.head
        while p is not None:
            if p.next.data == data:
                name = data
                p.next = p.next.next
                return name
            p = p.next
        else:
            print('此人不在表内。')

    def insert(self, data1=None, data2=None):
        '插入节点'
        node = Node(data2)
        p = self.head.next
        while p is not None:
            if p.data == data1:
                node.next = p.next
                p.next = node
                print('{}已插入{}后。'.format(data2, data1))
            p = p.next


L = LinkList()
name = input("输入人名(输入quit代表结束输入):\n")
while not name == 'quit':
    L.create(name)
    name = input()

# 1
print('(1)学生姓名:', end='')
L.display()
print('学生人数:', L.length())

# 2
print('(2)宿舍长位置:', L.locating('尚焱'))

# 3
print('(3)')
L.insert('尚焱', '王晨鉴')
print(L.delete('尚焱'), '已删除。')
print('现在在这两个宿舍的学生:', end='')
L.display()

代码的时间复杂度如下:

  • empty():O(1)
  • create():O(1)
  • length():O(n)
  • display():O(n)
  • locating():O(n)
  • delete():O(n)
  • insert():O(n)

其中,n为链表的长度。

代码的空间复杂度为O(n),其中n为链表的长度。因为需要存储链表中的每个节点的数据和指针,所以空间复杂度与链表的长度成正比。

Python 链表实现:基本操作与复杂度分析

原文地址: https://www.cveoy.top/t/topic/PkR 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录