from linked_list import Node l1 = Node() l1.insert_at_beginning(7) l1.insert_at_end(2) l1.insert_at_end(4) l1.insert_at_end(3) # l1.insert_at_end(5) l2= Node() l2.insert_at_beginning(5) l2.insert_at_end(6) l2.insert_at_end(4) class ListNode(object): def __init__(self, x): self.data = x self.next = None class Solution(object): def addTwoNumbers(self, l1, l2): """ :type l1: ListNode :type l2: ListNode :rtype: ListNode """ l1 = self.reverse(l1) l2 = self.reverse(l2)
""" Reverse a Linked List with O(1) space, without using recursion. """ import copy from linked_list import Node node = Node() node.insert_at_beginning(1) node.insert_at_end(2) node.insert_at_end(3) node.insert_at_end(4) node.insert_at_end(5) prev_node = None next_node = node.head.next while (True): node.head.next = prev_node if next_node == None: break prev_node = node.head node.head = next_node next_node = next_node.next node.print_list()
""" Merge sort of a linked list """ from linked_list import Node node = Node() node.insert_at_beginning(5) node.insert_at_beginning(2) node.insert_at_beginning(1) node.insert_at_beginning(10) node.insert_at_beginning(-1) node.insert_at_beginning(30) node.insert_at_beginning(12) node.insert_at_beginning(6) node.print_list() def get_middle(head): slowptr = head fastptr = head while fastptr and fastptr.next: slowptr = slowptr.next fastptr = fastptr.next.next return slowptr def sorted_merge(left, right): if not left: return right
from linked_list import Node node = Node() node.insert_at_beginning(5) node.insert_at_beginning(4) node.insert_at_beginning(2) node.insert_at_beginning(1) def insert_in_sorted_list(node, item): previous = None current = node.head stop = False while current != None and not stop: if current.data > item: stop = True else: previous = current current = current.next temp = Node(item) if previous == None: temp.next = node.head node.head = temp else: temp.next = current previous.next = temp insert_in_sorted_list(node, 3)