将链表转换为python中的数字

时间:2014-03-16 07:31:09

标签: python list numbers

class Node(object):
    def __init__(self,value=None):
        self.value = value
        self.next = None

上面的类是节点定义

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

这是将数字转换为链表的代码 例如,

 assert [1,2,0] == number_to_list(120)
 assert [0] == number_to_list(0)
 assert [-1, -2, 0] == number_to_list(-120)

但是,我应该如何从链表转换为数字

 def list_to_number(head)
 pass

例如,

 assert 120 == list_to_number([1,2,0])
 assert -120 == list_to_number([-1,-2,0])

我正在尝试过去3天,但我没有遇到任何解决方案请帮助我从这个

2 个答案:

答案 0 :(得分:0)

假设列表将包含至少一个数字的负数,

def list_to_number(somelist):
    neg=False
    num = ''
    for number in somelist:
        val = str(number)
        if (val.find('-')!= -1):
            neg = True
        num=num+val.replace('-','')
    if (neg==False):
        return int(num)
    else:
        return -1*int(num)

希望这很容易理解。

修改

我从您的评论中了解到,您有一个链接列表设置而不是列表。那应该不是问题,逻辑应该保持不变。唯一改变的就是你如何迭代,我不能给你的代码,因为那将是你的功课。

答案 1 :(得分:0)

另一种解决方案只是为了变化:

def list_to_number(a_list):
  a = ''.join(str(abs(i)) for i in a_list) 
  if any(n < 0 for n in a_list):
    a = '-%s' % a
  return int(a)