链表操作

作者: 七月尾巴_葵花 | 来源:发表于2017-05-12 02:55 被阅读42次
class linkedList:
    
    
    def __init__(self, l=[]):

        if(type(l) == list):
            self.val = l[0]
            if(not l[1:]):
                self.next = None
                self.tail = self
            else:
                self.next = linkedList(l[1:])
                self.tail = self.next
        else:
            self.val = l
            self.next = None
            self.tail = self 
            
            
    def __getitem__(self, key):
        
        if(key < 0):
            raise IndexError("Index Out Of range")
        
        elif(key == 0):
            return self.val
        return self.next[key - 1]
    
    def __setitem__(self, key, val):
    
        if(key < 0):
            raise IndexError("Index Out Of range")
        
        elif(key == 0):
            self.val = val
        
        else:
            self.next[key - 1] = val

    
    def __add__(self, y):
        
        if(self.next):
            self.next + y
        else:
            self.next = linkedList(y)
        

    def __add__(self, y):
        
        if(self.next):
            self.next + y
        else:
            self.next = linkedList(y)
   
    def __radd__(self, y):
        
        return y + self.list()

    def __mul__(self, y):
        
        if(y == 0):
            return None
        else:
            return self + self * (y - 1)
        
    def __rmul__(self, y):
        
        return self * y
        
    def __contains__(self, x):
        
        if(self.next):   
            return (self.val == x) or (x in self.next)
        return (self.val == x)
        
    def __len__(self):
        
        if(self.next):
            return 1 + len(self.next)
        else:
            return 1
        
    def list(self):
        
        if(self.next):
            return [self.val] + self.next.list()
        
        return [self.val]
 
    def __iter__(self):
        
        return linkediter(self)
    
    def append(self, val):
        
        if(self.next):
            self.next.append(val)
            return None
        else:
            self.next = linkedList(val)
            return self.next
        
    def __str__(self):
        
        if(self.next):
            return str(self.val) + "->" + str(self.next)
        return str(self.val)
    
class linkediter:
    
    def __init__(self, l):
        
        self.list = l 
        
    def __next__(self):
        
        if(self.list == None):
            raise StopIteration     
        
        c = self.list[0]
        self.list = self.list.next
        print(self.list)
        return c

相关文章

  • Java双向链表

    链表节点 链表操作

  • Java环形单向链表

    链表节点 链表操作

  • 链表

    文章结构 链表的定义 链表的插入和删除操作 链表的特性 常见的链表结构 自定义链表 链表的经典操作 使用链表实现L...

  • 线性表的链式存储-单链表

    单链表操作 [x] 单链表的创建(尾插法、头插法) [x] 单链表的查找操作 [x] 单链表的删除操作 [x] 单...

  • 重拾算法Day08-链表

    链表 本节主要讲链表,包括链表的构造,链表的插入等操作。

  • Java常用类库与技巧-集合

    一 数据结构常见问题 数组和链表的区别;链表的操作,如反转,链表环路检测,双向链表,循环链表相关操作;队列,栈的应...

  • 大话数据结构之链表(二)

    上一篇《链表概念篇》中, 主要给小伙伴们讲述了什么是链表? 为什么链表是线性结构? 链表的操作是什么? 链表操作的...

  • 链式存储结构的线性表

    单链表结构可用如下C语言代码描述 建立链表操作 读取操作 插入节点操作 删除一个节点操作 遍历操作 链式存储结构线...

  • 循环链表定义及操作

    循环链表定义 定义与单链表一样,操作时将末结点的指针指向开始结点即可 循环链表操作 初始化循环链表 插入(尾插) ...

  • C语言基础 之 链表操作

    链表的操作 对链表的主要操作有建立链表、结构的查找与输出、结点数据的删除和结点数据的插入示例 动态链表的建立 动态...

网友评论

    本文标题:链表操作

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