python实现单向链表

#因为没有指针,所以要构造一个Node的类
class Node:
    #data和next都是私有变量所以都要get和set函数
    def __init__(self,data,next_node=None):
        self.__data=data
        self.__next=next_node
    def set_data(self,data):
        self.__data=data
    def get_data(self):
        return self.__data
    def set_next(self,next_node):
        self.__next=next_node
    def get_next(self):
        return self.__next
    
class Linked_list:#单链表
    def __init__(self):
        self.__head=None
    def search(self,node,data):
        if node is None:
            return False
        if node.get_data()==data:
            return node
        return self.search(node.get.next(),data)
    def get_list(self):#获得一个链表的所有数据以列表的形式返回
        temp=self.__head
        l_list=[]
        while temp:
            l_list.append(temp.get_data())
            temp=temp.get_next()
        return l_list
    def insert_at_start(self,data):
        if self.__head is None:
            new_node=Node(data)
            self.__head=new_node
        else:
            new_node=Node(data)
            new_node.set_next(self.__head)
            self.__head=new_node
    def insert_after(self,next_node_data,data):
        new_node=Node(data)
        current_node=self.search(self.__head,next_node_data)
        new_node.set_next(current_node.get_next())
        current_node.set_next(new_node)
    def insert_at_end(self,data):
        new_node=Node(data)
        temp=self.__head
        if temp is None:
            self.__head = new_node

        else:
            while temp.get_next() is not None:
                temp = temp.get_next()
            temp.set_next(new_node)
    def delete(self,data):
        temp=self.__head
        if temp is not None:
            if temp.get_data()==data:
                self.__head=temp.get_next()
                return
            else:
                while temp.get_next() is not None:
                    if temp.get_data()==data:
                        break
                    prev=temp
                    temp=temp.get_next()
                if temp.get_data()!=data:#这是最后一个数据
                    return
                prev.set_next(temp.get_next())
#示例程序
mylinklist=Linked_list()
for i in range(5,10):
    mylinklist.insert_at_end(i)
print(mylinklist.get_list())
mylinklist.delete(6)
print(mylinklist.get_list())
mylinklist.delete(10)
print(mylinklist.get_list())
mylinklist.insert_at_start(10)
print(mylinklist.get_list())
输出:
[5, 6, 7, 8, 9]
[5, 7, 8, 9]
[5, 7, 8, 9]
[10, 5, 7, 8, 9]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值