Python实现链表的各种功能

class Node():
    def __init__(self,val,nxt):
        self.val=val
        self.nxt=nxt
    def __str__(self):
        return str(self.val)
    def __repr__(self):
        return 'value is '+str(self.val)


class LinkedList():
    def __init__(self,lst=None):
        self.head=None
        if lst!=None:
            for val in lst:
                self.add(val)


    def add(self,val):
        self.head=Node(val,self.head)


    def remove(self,value):
        m=self.head
        if m.val==value:
            self.head=m.nxt
        else:    
            while m!=None:
                if m.val==value:
                    n.nxt=f
                    break
                else:
                    n=m
                    m=m.nxt
                    if m==None:
                        print('不存在')
                    else:    
                        f=m.nxt


    def remove1(self,value):
        m=self.head
        if m==None:
            return None
        if m.val==value:
            self.head=m.nxt
        while m.nxt != None and m.nxt.val != value:
            m=m.nxt
        if m.nxt!=None:
            m.nxt=m.nxt.nxt   
                             
    def insert(self,value,i):
        count=2
        b=Node(value,None)
        t=self.head
        if i==1:
            self.add(value)
        else:
            while count!=i:
                t=t.nxt
                count+=1
                c=t.nxt
            t.nxt=b
            b.nxt=c
    def insert1(self,val,idx):
        if idx == 0 or self.isEmpty():
            self.add(val)
        elif idx >len(self):
            p=self.head
            print('loop: ',idx)
            while p.nxt!=None:
                p=p.nxt
            p.nxt=Node(val,None)    
        else:
            p=self.head
            while p!= None and idx >1:
                idx-=1
                p=p.nxt
            p.nxt=Node(val,p.nxt)         
    
    def index(self,value):
        p=self.head
        idx=0
        while p!=None:
            if p.val==val:
                return idx
            idx+=1
            p=p.nxt
        else:
            return -1


    def isEmpty(self):
        return self.head==None
        
    def __str__(self):
        p=self.head
        s='->'
        while p!=None:
            s+=str(p.val)+'->'
            p=p.nxt
        s+='None'    
        return s
    def __len__(self):
        p=self.head
        l=0
        while p!=None:
            p=p.nxt
            l+=1
        return l    

猜你喜欢

转载自blog.csdn.net/weixin_39406669/article/details/79464017