class Deque(Container):
  def __init__(self):
    self._list = DoublyLinkedList()

  def getHead(self):
    return self._list.head
  def getTail(self):
    return self._list.tail

  head = property(
      fget = lambda self: self.getHead())
  tail = property(
      fget = lambda self: self.getTail())

  def enqueueHead(self, obj):
    self._list.prepend(obj)

  def dequeueHead(self):
    assert not self._list.isEmpty
    return self._list.extract(self._list.head.value)

  def enqueueTail(self, obj):
    self._list.append(obj)

  def dequeueTail(self):
    assert not self._list.isEmpty
    return self._list.extract(self._list.tail.value)

  def __iter__(self):
    pass

  def _compareTo(self, obj):
    pass

  def purge(self):
    self._list.purge()

  #override
  def getIsEmpty(self):
    return self._list.isEmpty
class Deque(Container):
    def __init__(self):
        self._list = DoublyLinkedList()

    def getHead(self):
        return self._list.head

    def getTail(self):
        return self._list.tail

    head = property(fget=lambda self: self.getHead())
    tail = property(fget=lambda self: self.getTail())

    def enqueueHead(self, obj):
        self._list.prepend(obj)

    def dequeueHead(self):
        assert not self._list.isEmpty
        return self._list.extract(self._list.head.value)

    def enqueueTail(self, obj):
        self._list.append(obj)

    def dequeueTail(self):
        assert not self._list.isEmpty
        return self._list.extract(self._list.tail.value)

    def __iter__(self):
        pass

    def _compareTo(self, obj):
        pass

    def purge(self):
        self._list.purge()

    #override
    def getIsEmpty(self):
        return self._list.isEmpty
def main():
    # Start with empty list
    llist = DoublyLinkedList()
     
    # Insert 6. So the list becomes 6->None
    llist.append(6)
     
    # Insert 7 at the beginning.
    # So linked list becomes 7->6->None
    llist.push(7)
     
    # Insert 1 at the beginning.
    # So linked list becomes 1->7->6->None
    llist.push(1)
     
    # Insert 4 at the end.
    # So linked list becomes 1->7->6->4->None
    llist.append(4)
     
    # Insert 8, after 7.
    # So linked list becomes 1->7->8->6->4->None
    llist.insert(llist.head.next, 8)

    print('###################')
    llist.printList() 
    
    # So linked list becomes 1->7->8->2->6->4->None
    llist.insertAt(2, 2)
    llist.printList()
    
    print('###################')
    llist.delete(llist.head)
    llist.delete(llist.head.next)
    llist.delete(llist.head.next)
    llist.printList()
    print('###################')
    llist.deleteAt(2)
    llist.printList()
def main():
    print('###############################')
    # array declaration
    arr = [2, 3, 5, 8, 9, 10, 11]
     
    # value to search
    val = 17
     
    print(isPairSum(arr, len(arr), val))
    
    print('###############################')
    llist = DoublyLinkedList()
    for item in arr:
        llist.append(item)
    pairSum( llist.head, val )
    print('###############################')  
    arr = [0, -1, 2, -3, 1]
    n = len(arr)
    findTriplets_hash(arr, n)
    print('###############################') 
    findTriplets(arr, n)
    print('###############################')
    nums    = [0,0,1,1,1,2,2,3,3,4]
    k       = removeDuplicates( nums )
    print(k)
    print(nums[:k])
    nums = [1,1,2]
    k       = removeDuplicates( nums )
    print(k)
    print(nums[:k])
    nums    = [0,0,1,1,1,2,2,3,3,4]
    print('######## removeDuplicates2 #######################')
    k       = removeDuplicates2( nums )
    print(k)
    print(nums[:k])
    print('###############################')
    llist = LinkedList()
    llist.push(20)
    llist.push(4)
    llist.push(4)
    llist.push(20) 
    print( isPalindrome(llist.head) ) 
    print( isPalindrome2(llist.head) )
    print('###############################')
    llist = LinkedList()
    llist.push(7)
    llist.push(6)
    llist.push(5)
    llist.push(4) 
    llist.push(3)
    llist.push(2) 
    llist.push(1)
    llist.printList()
    print('###############################')
    reorderList(llist.head)
    llist.printList()
    print('###############################')
    arr = [1,2,3,4,5,6]
    swap(arr,0,3)
    print(arr)
    reverse(arr)
    print(arr)
    print('###############################')
    height = [1,8,6,2,5,4,8,3,7]
    print(maxArea(height))
    print('###############################')
예제 #5
0
class TestList(unittest.TestCase):
  def setUp(self):
    self.l = DoublyLinkedList()

  def test_init(self):
    self.assertEqual(self.l.head, None)
    self.assertEqual(self.l.tail, None)

  def test_append(self):
    self.l.append(1)
    self.assertEqual(self.l.head.value, 1)
    self.assertEqual(self.l.tail.value, 1)
    self.l.append(2)
    self.assertEqual(self.l.head.value, 1)
    self.assertEqual(self.l.tail.value, 2)
    self.assertEqual(self.l.first.value, 1)
    self.assertEqual(self.l.last.value, 2)

  def test_prepend(self):
    self.l.prepend(1)
    self.assertEqual(self.l.head.value, 1)
    self.assertEqual(self.l.tail.value, 1)
    self.l.prepend(2)
    self.assertEqual(self.l.head.value, 2)
    self.assertEqual(self.l.tail.value, 1)
    self.l.prepend(3)
    self.assertEqual(self.l.head.value, 3)
    self.assertEqual(self.l.tail.value, 1)

  def test_purge(self):
    self.l.append(1)
    self.l.append(2)
    self.l.append(3)
    self.assertEqual(self.l.head.value, 1)
    self.assertEqual(self.l.tail.value, 3)
    self.l.purge()
    self.assertEqual(self.l.head, None)
    self.assertEqual(self.l.tail, None)

  def test_extract(self):
    self.l.append(1)
    self.l.append(2)
    self.l.append(3)
    self.l.append(4)
    self.l.append(5)
    self.assertEqual(self.l.extract(1), 1)
    self.assertEqual(self.l.head.value, 2)
    self.assertEqual(self.l.extract(10), None)
    self.assertEqual(self.l.extract(5), 5)
    self.assertEqual(self.l.tail.value, 4)

  def test_copy(self):
    self.l.append(1)
    self.l.append(2)
    self.l.append(3)
    a = copy(self.l)
    self.assertEqual(a.head.value, 1)
    self.assertEqual(a.tail.value, 3)

  def test_empty(self):
    self.assertTrue(self.l.isEmpty)
    self.l.append(1)
    self.assertFalse(self.l.isEmpty)
    self.l.extract(1)
    self.assertTrue(self.l.isEmpty)