在Python中将链表转换为数字

0 投票
2 回答
4172 浏览
提问于 2025-04-17 22:31
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])

我已经尝试了三天,但没有找到任何解决办法,请帮帮我!

2 个回答

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)

希望这个解释足够简单易懂。

编辑

我从你的评论中了解到,你使用的是链表,而不是普通的列表。这没问题,逻辑还是一样的。唯一不同的就是你遍历(查看)数据的方式。我不能给你代码,因为那样就相当于帮你做作业了。

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)

撰写回答