美文网首页个人专题
单链表的Python实现

单链表的Python实现

作者: dalalaa | 来源:发表于2018-03-28 12:42 被阅读23次
    #链表节点
    
    class LNode:
        def __init__(self,elem,next_ = None):
            self.elem = elem
            self.next_ = next_
    
    #链表
    
    class LList:
        def __init__(self):
            self.head_ = None
        
        #检查是否为空表
        def is_empty(self):
            return self.head_ is None
        
        #在表头插入元素
        def prepend(self,elem):
            self.head_ = LNode(elem,self.head_)
        
        #删除并返回表头数据
        def pop(self):
            if self.head_ is None:
                raise LinkedListUnderFlow('in pop')
            e = self.head_.elem
            self.head_ = self.head_.next_
            return e
    
        #后端插入
        def append(self,elem):
            if self.head_ is None:
                self.head_ = LNode(elem)
                return #如果头节点为空则赋值给头节点并提前结束
            p = self.head_
            while p.next_ is not None:
                p = p.next_
            p.next_ = LNode(elem)
        
        #删除并返回表末数据
        def pop_last(self):
            if self.head_ is None:
                raise LinkedListUnderFlow("in pop_last")
            p = self.head_
            if p.next_ is None:#如果只有一个元素则操作于pop()一致
                e = p.elem
                self.head_ = None
                return e
            while p.next_.next_ is not None:
                #遍历,直到找到p.next_.next_为None的元素,此时p.next_即为最后一个元素
                p = p.next_
            e = p.next_.elem
            p.next_ = None
            return e
        
        #寻找满足条件的元素,pred为筛选函数
        def find(self,pred):
            p = self.head_
            while p is not None:
                if pred(p.elem):
                    return p.elem
                p = p.next_
        
        #对链表元素批量操作,proc为操作函数
        def for_each(self,proc):
            p = self.head_
            while p is not None:
                proc(p.elem)
                p = p.next_
        
        #返回链表中所有元素(以生成器的形式)
        def elements(self):
            p = self.head_
            while p is not None:
                yield p.elem
                p = p.next_
        
        #寻找多个满足条件的元素(以生成器的形式)
        def filter(self,pred):
            p = self.head_
            while p is not None:
                if pred(p.elem):
                    yield p.elem
                p = p.next_
    
    

    相关文章

      网友评论

        本文标题:单链表的Python实现

        本文链接:https://www.haomeiwen.com/subject/mgpycftx.html