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]

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python单向链表是一种常见的数据结构,它由一系列节点组成,每个节点包含一个数据元素和一个指向下一个节点的指针。链表中的节点按照顺序连接在一起,形成一个链式结构。 下面是Python单向链表的基本实现方式: 1. 定义节点类:首先定义一个节点类,包含两个属性:数据元素和指向下一个节点的指针。 ```python class Node: def __init__(self, data): self.data = data self.next = None ``` 2. 定义链表类:链表类包含若干个节点,以及对链表进行操作的方法。 ```python class LinkedList: def __init__(self): self.head = None def append(self, data): new_node = Node(data) if self.head is None: self.head = new_node else: current = self.head while current.next: current = current.next current.next = new_node def insert(self, data, position): new_node = Node(data) if position == 0: new_node.next = self.head self.head = new_node else: current = self.head for _ in range(position - 1): if current.next is None: raise IndexError("Index out of range") current = current.next new_node.next = current.next current.next = new_node def delete(self, position): if self.head is None: raise IndexError("Index out of range") if position == 0: self.head = self.head.next else: current = self.head for _ in range(position - 1): if current.next is None: raise IndexError("Index out of range") current = current.next if current.next is None: raise IndexError("Index out of range") current.next = current.next.next def get(self, position): if self.head is None: raise IndexError("Index out of range") current = self.head for _ in range(position): if current.next is None: raise IndexError("Index out of range") current = current.next return current.data def size(self): count = 0 current = self.head while current: count += 1 current = current.next return count ``` 以上是一个简单的Python单向链表实现,包括了向链表末尾添加节点、在指定位置插入节点、删除指定位置的节点、获取指定位置的节点值以及获取链表长度等基本操作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值