在Python中将链表转换为数字
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)