python中的链表功能出错

时间:2014-02-03 16:49:29

标签: python

我必须将一个数字转换为链表,这样每个数字都在一个节点中并指向具有下一个数字的节点。该函数应返回链表的头部。例如,输入120应该创建节点列表1 - > 2 - > 0并返回引用。如果是负数,则说-120,它应该返回-1-> -2-> 0.I我试图这样做:

def number_to_list(number):
    head,tail = None,None
    for x in str(number):
        if x<0:
           x = -int(x)
           node = Node(int(x))
        else:
           node = Node(int(x))
        if head:
           tail.next = node
        else:
            head = node
        tail = node
    return head
    pass

它对正数很好但是如果我传递-120.它显示错误:

ValueError: invalid literal for int() with base 10: '-'. 

我该如何解决?

6 个答案:

答案 0 :(得分:1)

问题是你正在迭代一个字符串

for x in string(number):

使x成为一个字符,迭代字符串数。现在,当您有一个正数时,数字中的每个数字都可以转换为int。但是当你传递一个负数时,x取值' - ',它不能转换为整数。你得到错误。根据我的看法,我认为你存储列表中数字的数字的绝对值。这可以通过检查字符是否为“ - ”来完成,您可以在此迭代中让pass无效。

if x=='-':
    continue

答案 1 :(得分:1)

在带负数的第一次迭代中,你实际上是这样做的:

int('-')

答案 2 :(得分:1)

你应该添加一行代码来检查' - '(如果你允许小数值,可能还有'。'。)

if(x=='-'):
    # Mark the number as negative
    negative = True
    # Move on to the next character
    continue

答案 3 :(得分:0)

str(-120)返回' - ','1','2','0'

试试这个:

    needMinus = number < 0
    for x in str(abs(number)):
        if needMinus:
            x = -int(x)
            needMinus = False
            node = Node(int(x))
        else:
            node = Node(int(x))
        if head:
            tail.next = node

        else:
            head = node
        tail = node

答案 4 :(得分:0)

当您传递负数时,在第一次迭代中调用此int('-')。您可以保留一个布尔标记,通过该标记可以识别数字是正数还是负数。

实施例: 注意:我没有测试过这段代码。这段代码只是为了给出一个想法

  def number_to_list(number):
    head,tail = None,None
    positive = True
    for x in str(number):
        if x=='-':
           positive = False
           continue
        else:
          if postive:
             node = Node(int(x))
          else:
             node = Node(int("-"+x))
        if head:
           tail.next = node
        else:
            head = node
        tail = node
    return head
    pass

答案 5 :(得分:0)

转换非字符串(默认情况下为10)整数会产生ValueError

In [1034]: int('-')
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-1034-4c2a77a1869c> in <module>()
----> 1 int('-')

ValueError: invalid literal for int() with base 10: '-'

同样,int('10L'), int('0x1a'), int('abc'),等。

如果number实际上是负数,您可以将number视为正数,然后在每个数字上添加一个负号:

def number_to_list(number):
    head,tail = None,None
    if number<0: number=-number
    sign=-1 if number<0 else 1

    for x in str(number):
        node = Node(sign*x)

        if head:
            tail.next = node
        else:
            head = node
        tail = node
    return head
    pass