python与双链表

本文详细介绍了双链表的基本操作,包括定义双链表结点、实现尾插、头插、任意位置插入、输出链表、获取链表长度、判断链表是否为空、查找元素以及删除元素等关键功能。
#定义双链表结点
class Node():
    def __init__(self,elem):
        self.elem=elem
        self.fore=None
        self.next=None
#定义双链表操作
class Double_Link():
    def __init__(self):
        self.nextlast=None
    #尾插
    def append(self,elem):
        Elem=Node(elem)
        if not self.is_empty():
            current=self.nextlast
            while current.next:
                current=current.next
            current.next=Elem
        else:
            self.nextlast=Elem
    #头插
    def add(self,elem):
        Elem=Node(elem)
        if not self.is_empty():
            Elem.next=self.nextlast
            self.nextlast.fore=Elem
            self.nextlast=Elem
        else:
            self.nextlast=Elem
    #任意插
    def insert(self,num,elem):

        if num<0 or num>self.get_length():
            raise IndexError("输入索引不在取值范围内")
        if not self.is_empty():
            if num==0:
                self.add(elem)
            if num==self.get_length():
                self.append(elem)
            else:
                Elem = Node(elem)
                goal=0
                current=self.nextlast
                while goal<(num-1):
                    goal += 1
                    current=current.next
                Elem.next=current.next
                current.next.fore=Elem
                current.next=Elem
                Elem.fore=current

    #输出链表
    def print_link(self):
        list=[]
        current=self.nextlast
        while current:
            list.append(current.elem)
            current=current.next
        print(list)
    #链表长度
    def get_length(self):
        length=0
        if self.nextlast:
            current=self.nextlast
            while current:
                length+=1
                current=current.next
        return length
    #是否为空
    def is_empty(self):
        return not self.nextlast
    #查找元素
    def find(self,elem):
        current=self.nextlast
        if not self.is_empty():
            while current:
                if current.elem==elem:
                    print("找到元素%s"%elem)
                else:
                    current=current.next
        else:
            print("双链表中没有元素")

    #删除元素
    def remove(self,elem):
        if self.is_empty():
            return
        else:
            #需要考虑被删元素是不是第一个结点
            current=self.nextlast
            if elem==current.elem:
                #需要判断这个链表中是不是只有一个元素
                if current.next==None:
                    self.nextlast=None
                else:
                    last=current.next
                    last.fore=None
                    self.nextlast=last
                return
            #被删元素不是第一个结点,需要遍历链表
            while current!=None:
                if current.elem==elem:
                    current.fore.next=current.next
                    current.next.fore=current.fore
                    break
                current=current.next
ll=Double_Link()
ll.append(1)
ll.append(2)
ll.append(3)
ll.remove(1)
ll.remove(2)
ll.print_link()

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值