True lists in python?

Vito 'ZeD' De Tullio zak.mc.kraken at libero.it
Sun Dec 19 07:59:12 EST 2010


Steven D'Aprano wrote:

> I can't see any way to go from this linked list:
> 
> node1 -> node2 -> node3 -> node4 -> node5 -> node6 -> node7
> 
> to this:
> 
> node1 -> node6 -> node5 -> node4 -> node3 -> node2 -> node7
> 
> in constant time. You have to touch each of the nodes being reversed.

very crude example:


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

    def nextNode(self):
        if not self.list.reversed:
            return self.next
        else:
            return self.previous

class LinkedList(object):
    def __init__(self):
        self.head = None
        self.reversed = False
    def insertAsHead(self, value):
        n = Node(value, self)
        n.next = self.head
        if self.head is not None:
            self.head.previous = n
        self.head = n

def main():
    ll = LinkedList()
    ll.insertAsHead(4)
    ll.insertAsHead(3)
    ll.insertAsHead(2)

    n = ll.head
    while n is not None:
       n_previous = n
       print n.value
       n = n.nextNode()

    print 'reversed'

    ll.reversed = True

    n = n_previous
    while n is not None:
       print n.value
       n = n.nextNode()

if __name__ == '__main__':
    main()


-- 
By ZeD




More information about the Python-list mailing list