#!/local/bin/python
class list:
	def __init__(self,val,next=0):
		self.val=val
		self.next=next
	def __repr__(self,delim=""):
		self.t=""
		if self.next != 0:
			self.t=self.next.__repr__("->")
		return "%s%d%s" % (delim,self.val,self.t)
	def add(self,val):
		t=self
		while t.next != 0:
			t=t.next
		t.next=list(val)
	def search(self,val):
		if self.val == val: return "true"
		if self.next == 0: return "false"
		return self.next.search(val)
	def delete(self,val):
		if self.val == val:
			self.val=self.next.val
			self.next=self.next.next
			return
		if self.next == 0: return
		if self.next.val == val:
			self.next=self.next.next
			return
		self.next.delete(val)
	def min(self,node=0):
		if node == 0: node=self
		self.t=node
		if self.val < self.t.val: self.t = self
		if self.next != 0: self.t = self.next.min(self.t)
		return self.t
	def sort(self):
		t=self.min()
		if t != self:
			tv=self.val
			self.val=t.val
			t.val=tv
		if self.next != 0: self.next.sort()
	def combine(self,l):
		if self.next == 0:
			self.next = l
			return
		self.next.combine(l)
	def copy(self):
		print "self",self
		if self.next == 0:
			return list(self.val)
		t=list(self.val,self.next.copy())
		print "self=",self,"t=",t
		return t
	def revcopy(self,next=0):
		print "self=",self,"next=",next
		if self.next == 0: return list(self.val,next)
		return self.next.revcopy(list(self.val,next))
def main():
	l=list(5)
	print l
	l.add(6)
	print l
	l.add(9)
	l.add(4)
	l.add(10)
	l.add(15)
	print l
	print "min=",l.min()
	l.sort()
	print l
	print "search(5)=",l.search(5)
	print "search(3)=",l.search(3)
	l.delete(5)
	print "l=",l
	k=l.copy()
	print "k=",k
#	j=list(8)
#	j.add(3)
#	j.add(7)
#	j.add(20)
#	print "j=",j
#	l.combine(j)
#	print "l=",l
#	print "k=",k
	r=k.revcopy()
	print "r=",r
if __name__ == '__main__': main()
