如何在链表中获取负索引节点?

时间:2018-04-30 06:45:39

标签: python linked-list

嗨,我是Python的初学者,我刚开始学习链表。我写了一个方法获取节点,获取列表中特定索引的节点,但现在我想尝试从负索引获取节点。例如,如果a_list = [1,2,3] a_list [-1]将等于3,依此类推。这是我的get_node方法,仅适用于正索引:

def _get_node(self, index):
    if index >0 and index >=len(self) :
        raise IndexError( "Positive index out of range")
    node=self.head
    for _ in range(index):
        node=node.next
    return node

现在我尝试为负面索引编写另一种方法:

 def _get_nodeNegative(self, index):
    if index <0 and index < -1 *len(self) :
        raise IndexError( "Positive index out of range")
    if index==-1:
        node=self._get_node(len(self)-1)

    else:
        for _ in range(index, 0 ,1):
          //Problem here
            node=node.next
    return node

问题是链表只能向前迭代所以如果我试图得到a_list [-2]我得到错误AttributeError:'NoneType'对象没有属性'next'。

任何建议都会有所帮助。

2 个答案:

答案 0 :(得分:0)

你写过

node=node.next

但没有定义“node”对象,因此它是一个'NoneType'对象。您定义它的唯一时间是在它上面的if语句中,但实际上如果你进入else语句,你还没有创建一个节点对象来执行node.next。

答案 1 :(得分:0)

负指数和正指数之间的关系是正指数 - len(自我)=负指数所以我必须在getNodeNegative中改变

for _ in range(index, 0 ,1):
        node=self._get_node(index+len(self))