while l1 < l2: zero = ll.ListNode(0) zero.next = head1 head1 = zero l1 += 1 #print "%d,%d" % (l1,l2) ll.print_list(head1) ll.print_list(head2) res,flag = rec(head1,head2,l1-1) if flag == 1: return res+10**l1 else: return res def rec(head1,head2,i): if i == 0: tmp = head1.val+head2.val return (tmp%10,tmp/10) res = 0 tmp = head1.val + head2.val head1 = head1.next head2 = head2.next other,flag = rec(head1,head2,i-1) return ((tmp+flag)%10*(10**i)+other,tmp/10) head1 = ll.create_list([1,2,1,7,1,6]) head2 = ll.create_list([5,9,2]) ll.print_list(head1) ll.print_list(head2) print add2(head1,head2)
import mylist as ll import pdb # check if a list is a palidrome # O(n2) solution def isPalidrome(head): if not head or not head.next: return True size = ll.get_length(head) return rec(head,size-1) def rec(head,size): if size < 1: return True a = head i = 0 for i in range(size): a = a.next return head.val == a.val and rec(head.next,size-2) head1 = ll.create_list([1,2,2]) #head2 = ll.create_list([5,9,2]) ll.print_list(head1) #ll.print_list(head2) print isPalidrome(head1)
import mylist as ll # find the kth element in the list def return_kth(head, k): size = ll.get_length(head) if not head or k > size: print "invalid input" return 0 # far = size-k+1 start = head end = head for i in range(k): end = end.next while end: start = start.next end = end.next return start.val head = ll.create_list([1, 2, 3, 4, 5]) ll.print_list(head) print return_kth(head, 2)