Пример #1
0
    """
    def addLists(self, l1, l2):
        # write your code here
        head = ListNode(0)
        node = head
        tmp = 0
        while l1 is not None or l2 is not None or tmp == 1:
            v1 = l1.val if l1 else 0
            v2 = l2.val if l2 else 0
            s = v1 + v2 + tmp
            tmp = 1 if s > 9 else 0
            newnode = ListNode(s % 10)
            node.next = newnode
            node = newnode
            if l1:
                l1 = l1.next
            if l2:
                l2 = l2.next
        return head.next


from ListNode import LinkedList
if __name__ == '__main__':
    s = Solution()
    l1 = LinkedList([7, 1, 6])
    l2 = LinkedList([5, 9, 2])
    l1 = LinkedList([1, 1, 1, 1, 1])
    l2 = LinkedList([9, 8, 8, 8, 8])
    head = s.addLists(l1.head, l2.head)
    head.printAsList()
    def sortedListToBST(self, head):
        """
        :type head: ListNode
        :rtype: TreeNode
        """
        node, length = head, 0
        while node:
            node = node.next
            length += 1
        self.curr = head
        return self._sortedListToBST(0, length - 1)

    def _sortedListToBST(self, left, right):
        if left > right:
            return None
        mid = (left + right) // 2
        left = self._sortedListToBST(left, mid - 1)
        root = TreeNode(self.curr.val)
        root.left = left
        self.curr = self.curr.next
        root.right = self._sortedListToBST(mid + 1, right)
        return root


from ListNode import LinkedList

if __name__ == '__main__':
    s = Solution()
    l = LinkedList([1, 2, 3, 4, 5, 6])
    root = s.sortedListToBST(l.head)
Пример #3
0
        # write your code here
        if n == 0:
            return head
        node = head
        node2 = head
        for k in range(n):
            node = node.next
        if node is None:
            return head.next
        while node.next:
            node = node.next
            node2 = node2.next
        if node2.next.next:
            node2.next = node2.next.next
        else:
            node2.next = None
        return head
        
        
        
        
if __name__ == '__main__':
    s = Solution()
    llst = LinkedList([1,2,3,4,5])
    n = 2
    # llst = LinkedList([1])
    # n = 1
#     llst = LinkedList([1,2])
#     n = 2
    head = s.removeNthFromEnd(llst.head, n)
    head.printAsList()
Пример #4
0
            head = l1
            l1 = l1.next
        else:
            head = l2
            l2 = l2.next
        node = head
        while l1 and l2:
            if l1.val < l2.val:
                node.next = l1
                l1 = l1.next
            else:
                node.next = l2
                l2 = l2.next
            node = node.next
        if l1:
            node.next = l1
        else:
            node.next = l2
        return head


from ListNode import LinkedList
if __name__ == '__main__':
    s = Solution()
    l1 = LinkedList([1, 3, 8, 11, 15])
    l2 = LinkedList([2])
    l1 = LinkedList([2, 3, 8, 11, 15])
    l2 = LinkedList([1, 7])
    head = s.mergeTwoLists(l1.head, l2.head)
    head.printAsList()
Пример #5
0
        m += 1
        n += 1
        l1 = None
        l2 = None
        while counter < n:
            if counter >= m and counter < n:
                tmp = node2.next
                node2.next = node1
                node1 = node2
                node2 = tmp
                if counter == n - 1:
                    r1 = node1
                    r2 = node2
                    l1.next = r1
                    l2.next = r2
            elif counter < m:
                if counter == m - 1:
                    l1 = node1
                    l2 = node2
                node1 = node1.next
                node2 = node2.next  
            counter += 1
        return prehead.next
        
from ListNode import LinkedList
if __name__ == '__main__':
    s = Solution()
    l1 = LinkedList([1, 2, 3, 4, 5])
    l2 = LinkedList([3760,2881,7595,3904,5069,4421,8560,8879,8488,5040,5792,56,1007,2270,3403,6062])
    head = s.reverseBetween(l2.head, 2, 7)
    head.printAsList()
Пример #6
0
class Solution:
    """
    @param head: head is the head of the linked list
    @return: head of linked list
    """
    def deleteDuplicates(self, head):
        # write your code here
        if head is None:
            return head
        node = head
        while node.next:
            if node.val == node.next.val:
                node.next = node.next.next
            else:
                node = node.next
        return head


from ListNode import LinkedList
if __name__ == '__main__':
    s = Solution()
    l1 = LinkedList([0, 1, 1, 2, 3])
    #l1 = LinkedList([1,1,2,3,3])
    head = s.deleteDuplicates(l1.head)
    head.printAsList()
Пример #7
0
        while node2:
            tmp = node2.next
            node2.next = node1
            node1 = node2
            node2 = tmp
        mid.next = None
        # Now node1 is tail
        node2 = head
        while node1 and node2:
            t2 = node2.next
            t1 = node1.next
            node2.next = node1
            node1.next = t2
            node2 = t2
            node1 = t1
        if node1:
            node1.next = None
        if node2:
            node2.next = None
        return head


from ListNode import LinkedList

if __name__ == '__main__':
    s = Solution()
    #l = LinkedList([1, 2, 3, 4, 5, 6, 7])
    l = LinkedList([0, 1])
    head = s.reorderList(l.head)
    head.printAsList()
Пример #8
0

class Solution:
    """
    @param head: n
    @return: The new head of reversed linked list.
    """
    def reverse(self, head):
        # write your code here
        if head is None:
            return None
        if head.next is None:
            return head
        node1 = head
        node2 = head.next
        while node2.next:
            tmp = node2.next
            node2.next = node1
            node1 = node2
            node2 = tmp
        node2.next = node1
        head.next = None
        return node2


from ListNode import LinkedList
if __name__ == '__main__':
    s = Solution()
    l1 = LinkedList([1, 2])
    head = s.reverse(l1.head)
    head.printAsList()
Пример #9
0
    """
    def rotateRight(self, head, k):
        # write your code here
        if head is None:
            return None
        node1 = head
        for i in range(k):
            if node1.next is None:
                node1 = head
            else:
                node1 = node1.next
        node2 = head
        while node1.next:
            node2 = node2.next
            node1 = node1.next
        node1.next = head
        newhead = node2.next
        node2.next = None
        return newhead
        
        
        
from ListNode import LinkedList
if __name__ == '__main__':
    s = Solution()
    l = LinkedList([1, 2, 3, 4, 5])
    k = 2
    l = LinkedList([17,75,80,87,44,45,75,86,74,20])
    k = 19
    head = s.rotateRight(l.head, k)
    head.printAsList()
Пример #10
0
            return head
        x = head.val
        head, pivot = self._partition(head, x)

        h1 = self.sortList(head)
        h2 = self.sortList(pivot.next)
        newhead = h1
        if h1 is None:
            newhead = pivot
            if h2:
                pivot.next = h2
        else:
            while h1.next:
                h1 = h1.next
            h1.next = pivot
            if h2:
                pivot.next = h2
        return newhead


from ListNode import LinkedList
if __name__ == '__main__':
    A = [39, 27, 43, 3, 9, 82, 10]
    A = [1, 2, 3] * 1000
    #print(mergeSort(A))
    #print(quicksort(A, 0, len(A)-1))
    s = Solution()
    l = LinkedList(A)
    head = s.sortList(l.head)
    head.printAsList()
Пример #11
0
            if node1.next.val < x:
                node1 = node1.next
            else:
                break
        if node1.next is None:
            return head
        
        node2 = node1.next
        while node2.next:
            if node2.next.val>= x:
                node2 = node2.next 
            else:
                tmp2 = node2.next
                tmp1 = node1.next
                node2.next = tmp2.next
                tmp2.next = tmp1
                node1.next = tmp2
                node1 = node1.next
        return prehead.next
            
        
        
        
        
from ListNode import LinkedList
if __name__ == '__main__':
    s = Solution()
    l1 = LinkedList([3, 4, 1, 2, 5, 2])
    x = 3
    head = s.partition(l1.head, x)
    head.printAsList()
Пример #12
0
    """
    def deleteDuplicates(self, head):
        # write your code here
        if head is None:
            return head
        prehead = ListNode(head.val - 1)
        prehead.next = head
        node = prehead
        while node.next and node.next.next:
            if node.next.val == node.next.next.val:
                v = node.next.val
                tnode = node.next
                while tnode:
                    if tnode.val == v:
                        tnode = tnode.next
                    else:
                        break
                node.next = tnode
            else:
                node = node.next
        return prehead.next


from ListNode import LinkedList
if __name__ == '__main__':
    s = Solution()
    l = LinkedList([0, 0, 0, 1, 1, 2, 3, 4])
    l = LinkedList([0])
    head = s.deleteDuplicates(l.head)
    head.printAsList()