简体   繁体   中英

error in converting linked list to a single number in python

here this is the node definition

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

this is the conversion for the code a number to linked list

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

this is code for conversion of linked list to number

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

here it is the test cases

def test_number_to_list():
    import listutils

    head = number_to_list(120)
    assert [1,2,0] == listutils.from_linked_list(head)
    assert 120 == list_to_number(head)

    head = number_to_list(0)
    assert [0] == listutils.from_linked_list(head)
    assert 0 == list_to_number(head)

    head = number_to_list(-120)
    assert [-1, -2, 0] == listutils.from_linked_list(head)
    assert -120 == list_to_number(head)

here from_linked_list means

 # avoids infinite loops
 def from_linked_list(head):
    result = []
    counter = 0
    while head and counter < 100: # tests don't use more than 100 nodes, so bail if you loop 100 times.
        result.append(head.value)
        head = head.next
        counter += 1
    return result

at last in this the problem is while converting the linked list to single number it is encountering an error ie,node object is not iterable

please help me out of this to write the code

def list_to_number(head):
    neg = False
    num = ''
   for number in  head:
        val = str(number)
       TypeError: 'Node' object is not iterable

here this is the traceback

The

for number in head:

is not a correct way to iterate of the list.

You need to start from head and then follow the chain of next references.

Note that if __iter__ is defined on Node like this:

class Node(object):

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

    def __iter__(self):
        that = self
        while that is not None:
            yield that.value
            that = that.next

Then:

for number in head:

Would actually work.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM