Newbie
Newbie

Reputation: 376

Python Linked List with Nodes. Iterable

I need some help writing an __iter__() method for my UnorderedList() class. I tried this:

def __iter__(self):
    current = self
    while current != None:
        yield current

But the while loop doesn't stop. Here is the rest of my classes and code:

class Node:
    def __init__(self,initdata):
        self.data = initdata
        self.next = None

    def getData(self):
        return self.data

    def getNext(self):
        return self.next

    def setData(self,newdata):
        self.data = newdata

    def setNext(self,newnext):
        self.next = newnext

class UnorderedList:

    def __init__(self):
        self.head = None
        self.count = 0

Upvotes: 2

Views: 6563

Answers (1)

glglgl
glglgl

Reputation: 91159

If you want to iterate all items succeedingly, you should do

def __iter__(self):
    # Remember, self is our UnorderedList.
    # In order to get to the first Node, we must do
    current = self.head
    # and then, until we have reached the end:
    while current is not None:
        yield current
        # in order to get from one Node to the next one:
        current = current.next

so that in every step you go one step further.

BTW, setters and getters aren't used in Python in the form of methods. If you need them, use properties, otherwise omit them altogether.

So just do

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

class UnorderedList(object):

    def __init__(self):
        self.head = None
        self.count = 0

    def __iter__(self):
        current = self.head
        while current is not None:
            yield current
            current = current.next

Upvotes: 7

Related Questions