单向列表搭建 升级版

何为链表

链表就是在引用之前就有其先后顺序元素之间通过持有其他引用指针来完成有序的数据结构.
链表分为单项链表和双向链表本文只针对单向链表的搭建进行描述.

节点

通过指针连接的每个元素称之为节点,节点由指针以及所携带数据(也可以携带字符串,列表等)

指针

用来连接各个元素的自定义属性

from typing import List #引用部分引用类型列表
#节点的创建
class Node:
    def  __init__(self,data):#定义节点属性
        self.data=data#节点赋值
        self.next=None#定义指针
    def __repr__(self):#将节点转化为字符串显示
        return f"Node({self.data})"
创建链表
class LinkList:
    def __init__(self):#定义链表属性
        self.head=None #定义头
        self.tail=None #定义尾
        self.size=0  #给定原有长度
        
    def get(self,index):#给定一个位置获取该位置节点
        cur=self.head
        for _ in range(index):
            cur=cur.next
        return cur
        
    def insert(self,index,element):#在指定位置插入元素
        new_node=Node(element)
        if index < 0 or index> self.size:
            raise Exception('索引越界')
        elif self.size == 0:
            self.head = new_node
            self.tail = new_node
        elif index==0:
            new_node.next=self.head
            self.head=new_node
        elif index==self.size:
            self.tail.next=new_node
            self.tail=new_node
        else:
            pre=self.get(index-1)
            new_node.next=pre.next
            pre.next=new_node
        self.size+=1
        
    def remove(self,index):#移除指定元素
        if index<0 or index>=self.size:
            raise Exception('索引越界')
        if index==0:
            remove_node=self.head
            self.head=self.head.next

        elif index==self.size-1:
            pre=self.get(index-1)
            remove_node=pre.next
            pre.next=None
            self.tail=pre
        else:
            pre = self.get(index - 1)
            remove_node = pre.next
            pre.next=pre.next.next
        self.size-=1
        return remove_node.data
        
    def reverse(self):#反转链表
        pre =None
        cur=self.head
        while cur:
            temp=cur.next
            if pre is None:
                cur.next=pre
            else:
                cur.next=pre
            pre=cur
            cur=temp
        self.head=pre
        
    def __repr__(self):#链表打印
        cur=self.head
        str1=""
        while cur :
            str1=str1+f"{cur}->"
            cur=cur.next
        return   str1+"END"

    def print_list(self):  # 链表内容打印
        cur = self.head
        while cur:
            print(cur.data)
            cur = cur.next

if __name__ == '__main__':
    l=LinkList()
    l.insert(0,1)
    l.insert(1,2)
    l.insert(2,4)
    l.insert(1,5)
    l.remove(3)
    # l.reverse()
    l.print_list()
    print(l)


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值