Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- def reverse (item, tail = None):
- next = item.next
- item.next = tail
- if next is None:
- return item
- else:
- return reverse(next, item)
- class LinkedList:
- def __init__ (self, value, next = None):
- self.value = value
- self.next = next
- def __repr__ (self):
- return 'LinkedList({}, {})'.format(self.value, repr(self.next))
- >>> a = LinkedList(1, LinkedList(2, LinkedList(3, LinkedList(4))))
- >>> a
- LinkedList(1, LinkedList(2, LinkedList(3, LinkedList(4, None))))
- >>> b = reverse(a)
- >>> b
- LinkedList(4, LinkedList(3, LinkedList(2, LinkedList(1, None))))
- >>> a # note that there is a new head pointer now
- LinkedList(1, None)
- def reverse(head):
- # Empty list is always None
- if not head:
- return None
- # List of length 1 is already reversed
- if not head.get_next():
- return head
- next = head.get_next()
- head.set_next(None)
- rest = reverse(next)
- next.set_next(head)
- return rest
- class Node(object):
- 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 LinkedList(object):
- def __init__(self):
- self.head = None
- def isEmpty(self):
- return self.head == None
- def add(self,data): #this method adds node at head
- temp = Node(data)
- temp.setNext(self.head)
- self.head = temp
- def traverse(self):
- current = self.head
- while current:
- if current.getNext():
- print(current.data,end="->")
- else:
- print(current.data)
- current = current.getNext()
- def reverse(self,item):
- if item.getNext() == None:
- self.head = item
- return
- self.reverse(item.getNext())
- temp = item.getNext()
- temp.next = item
- item.next = None
- def main():
- mylist = LinkedList()
- mylist.add(15)
- mylist.add(20)
- mylist.add(25)
- mylist.add(30)
- mylist.traverse()
- mylist.reverse(mylist.head)
- mylist.traverse()
- print(mylist.head.data)
- if __name__ == "__main__":
- main()
- Before:
- 30->25->20->15
- After:
- 15->20->25->30
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement