Link List in Python

Mike Meyer mwm at mired.org
Thu Jan 12 17:34:29 EST 2006


"sri2097" <srikar2097 at gmail.com> writes:
> Hi all, I have written a Link list implementation in Python (Although
> it's not needed with Lists and Dictionaries present. I tried it just
> for the kicks !). Anyway here is the code -

Generally very nice.

> # Creating a class comprising of node in Link List.
> class linklist:
>     def __init__(self, data=None,link=None):
>         self.data = data
>         self.link = link
>
>     def __str__(self):
>         return str(self.data)
>
> def printing(node):
>     print "-"*80
>     print ("[data][link] ---> [data][link] and so on till the end")
>     print "-"*80
>     while 1:
>         if node.link:
>             print node.data, node.link,"--->",
>             node = node.link
>         else:
>             # Printing the last node and exiting.
>             print node.data, node.link
>             print ("All nodes printed")
>             break
> Doubt -
> Now, Here I needed only 4 nodes. But what if I need more nodes. Is
> there any way to create the number of nodes at runtime. Since I plan to
> 'import' this module later. I wouldn't know how many nodes I need even
> before executing it. So, my doubt is - Is there any way to create 'n'
> number of object (here nodes) at runtime ?

Sure:

node = None
for i in range(n):
    node = linklist(i, node)

# Node now points to a linked list of n nodes, counting down as you traverse
# the list.

> Any general criticisms about the code are also welcome...

Well, your __str__ on linklist makes printing node.data, node.link
equivalent to printing node.data, node.link.data, which is
confusing. Maybe you want to make the __str__ method different?

Also, the while loop in printing can be shortened a bit. The canonical
loop scanner looks like:

while node:
    process(node)
    node = node.link

You have a slightly different process for the last node, which
requires a conditional in the loop. By re-arranging things so the
difference happens on the first node, you process the first node
outside the loop, and drop the conditional in the loop:

def printing2(node):
    print node.data, node.link,
    node = node.link
    while node:
        print "-->", node.data, node.link,
        node = node.link
    print "\nAll nodes printed"

Ok, part of the difference was printing the trailing newline. I moved
that to the final print statement to make it work right.

     <mike
-- 
Mike Meyer <mwm at mired.org>			http://www.mired.org/home/mwm/
Independent WWW/Perforce/FreeBSD/Unix consultant, email for more information.



More information about the Python-list mailing list