【数据结构】python实现链表操作

下面为代码,代码注释中有解释,代码最后为测试

class Node:
    def __init__(self, value=0, nex=None):
        self.value = value
        self.nex = nex

class ListNode:
    def __init__(self, value=0, *args):
        """
        初始化链表
        :param value: int
        :param args: int
        """
        # 三元表达式 self.head = None if value == 0 else self.head = Node(value)错误
        # 这是因为在赋值语句中不能在条件表达式中进行赋值操作。请修改这行代码为:self.head = None if value == 0 else Node(value)
        # 这行代码的意思和之前的一样
        self.head = None if value == 0 else Node(value)
        p = self.head
        for i in [*args]:
            n = Node(i)
            p.nex = n
            p = p.nex

    def en_empty(self):
        """
        清空链表
        :return:
        """
        self.head = None

    def show_all(self):
        """
        打印所有节点
        :return: int 链表长度
        """
        p = self.head
        while p != None:
            print(p.value)
            p = p.nex

    def ret_sum(self):
        # 链表长度
        n = 0
        p = self.head
        while p != None:
            n += 1
            p = p.nex
        return n

    def empty(self):
        """
        判断链表是否为空
        :return: bool
        """
        if self.head != None:
            return False
        else:
            return True


    def delete(self, n, *args):
        """
        删除第n个位置的节点,如何删除*aegs中的节点,顺序按照删除没一个节点后的算
        :param n: int
        :return: None
        """
        if self.empty():
            print("链表为空!!!")
            return
        p = self.head
        if n == 1:  # 删除头节点
            self.head = p.nex
            return self.delete(*args)
        for i in range(2, n):    # 循环n-2次,让p到要删的那个点的前一个节点
            p = p.nex
        p.nex = p.nex.nex
        for j in [*args]:
            self.delete(j)

    def insert(self, n, val):
        """
        在第n个节点后进行插入,插入的值为val
        :param n: int
        :param val: int
        :return:
        """
        if n == 0:
            if self.empty():
                self.head = Node(val)
                return
            else:
                p = Node(val)
                p.nex = self.head
                self.head = p
                return
        if n > self.ret_sum():
            # 插入位置超出链表长度时
            print("插入位置超出链表长度,无法插入!!!")
            return
        p = self.head
        q = Node(val)
        for i in range(1, n):    # 循环n-2次,让p到要删的那个点的前一个节点
            p = p.nex

        q.nex = p.nex
        p.nex = q



a = ListNode(1,2,4,3,5)
print(a.show_all())
print("///1")
a.delete(1, 2)
a.show_all()
print("///2")
a.insert(1, 6)
a.insert(4, 9)
a.show_all()
print("///3")
a.en_empty()
print(a.ret_sum())
a.show_all()
print("///4")
a.insert(1, 1)
a.show_all()

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值