Esempio n. 1
0
 def copy(self, node_cpy):
     if node_cpy:
         nd = Node(node_cpy.getData())
         nd.setNext(node_cpy.getNext())
         return nd
     else:
         return None
    def enqueue(self, data):
        new_node = Node(data)
        if self.head:
            curr = self.head
            prev = None
            while curr:
                prev = curr
                curr = curr.getNext()

            prev.setNext(new_node)
        else:
            self.head = Node(data)
Esempio n. 3
0
    def push(self, item):
        """
            :type value: item [int, string .. etc]
            :rtype: void Do not return anything, just add node in the first of list
        """
        # if not isinstance(item, Node):
        item = Node(item)

        item.setNext(self.head)
        self.head = item

        return
    def insertBefore(self, pos, item):
        """
        :param pos: int, to specify the pos of new element
        :param item: data, the new node data value
        :return: Bolean, True if insertion succeded False otherwise
        """
        item = Node(item)
        current = self.head
        prev = None

        current_pos = 1
        while current:
            if current_pos == pos:
                if prev:
                    prev.setNext(item)
                    item.setPrev(prev)
                    item.setNext(current)
                    current.setPrev(item)
                else:
                    self.head.setPrev(item)
                    item.setNext(self.head)
                    item.setPrev(None)
                    self.head = item
                return True
            prev = current
            current = current.getNext()
            current_pos += 1
        return False
    def append(self, item):
        """
        :param item: it's an new node data
        :return: void doesn't return anything
        """
        current = self.head

        while current:
            if not current.getNext():
                break
            current = current.getNext()

        if not self.head:
            item = Node(item)
            self.head = item
        else:
            item = Node(item)
            current.setNext(item)
            item.setPrev(current)
            item.setNext(None)
def sum_lists(num1, num2):
    node1, node2 = num1.head, num2.head
    carry = 0
    result_head, result_node = None, None
    while node1 or node2 or carry:
        value = carry
        if node1:
            value += node1.getData()
            node1 = node1.getNext()
        if node2:
            value += node2.getData()
            node2 = node2.getNext()
        if result_node:
            result_node.setNext(Node(value % 10))
            result_node = result_node.getNext()
        else:
            result_node = Node(value % 10)
            result_head = result_node
        carry = value // 10
    return result_head
    def push(self, item):
        """
        :param item: it's an new node data
        :return:  void doesn't return anything
        """
        item = Node(item)

        if self.head:
            self.head.setPrev(item)
        item.setNext(self.head)
        item.setPrev(None)
        self.head = item
Esempio n. 8
0
    def append(self, item):
        """
            :type value: item [int, string .. etc]
            :rtype: void Do not return anything, just add node in the end of list
        """
        item = Node(item)

        current = self.head
        while current:
            if not current.getNext():
                break
            current = current.getNext()

        if current:
            current.setNext(item)
        else:
            self.head = item

        item.setNext(None)

        return
    def push(self, data):
        if self._min and (self._min.getData() < data):
            old_min = self._min
            self._min = Node ( self._min.getData() )
            self._min.setNext( old_min )
        else:
            old_min = self._min
            self._min = Node ( data )
            self._min.setNext( old_min )

        old_h = self.head
        self.head = Node ( data )
        self.head.setNext( old_h )
    def insertAfter(self, pos, item):
        """
        :param pos: int, to specify the pos of new element
        :param item: data, the new node data value
        :return: Bolean, True if insertion succeded False otherwise
        """
        if pos <= 1:
            return "Pos must be greater than or equal to one"
        item = Node(item)
        current = self.head
        nxt = current.getNext()

        current_pos = 1
        while current:
            if current_pos == pos:
                if nxt:
                    nxt.setPrev(item)
                    current.setNext(item)
                    item.setNext(nxt)
                    item.setPrev(current)
                else:
                    if current_pos > 1:
                        item.setPrev(current)
                        item.setNext(nxt)
                        current.setNext(item)
                    else:
                        item.setNext(self.head.getNext())
                        item.setPrev(self.head.getPrev())
                        self.head.setPrev(item)

                        self.head = item
                return True
            current = current.getNext()
            nxt = current.getNext()
            current_pos += 1
        return False
Esempio n. 11
0
    def add(self, item):
        """
            :type value: item [int, string .. etc]
            :rtype: void Do not return anything, just add node in its sutiable position
        """
        current = self.head
        prev = None
        # stop = False
        while current:
            if current.getData() > item:
                break
            else:
                prev = current
                current = current.getNext()
        new_node = Node(item)
        if not prev:
            new_node.setNext(self.head)
            self.head = new_node
        else:
            new_node.setNext(current)
            prev.setNext(new_node)

        return
class LQueue:
    def __init__(self):
        self.head = None

    # This to enqueue element in the first of queue
    def enqueue(self, data):
        new_node = Node(data)
        if self.head:
            curr = self.head
            prev = None
            while curr:
                prev = curr
                curr = curr.getNext()

            prev.setNext(new_node)
        else:
            self.head = Node(data)

    # remove the first elemen in queue
    def dequeue(self):
        if self.isEmpty():
            return "Queue is already empty"
        removed_data = self.head.getData()

        if not self.head.getNext():
            self.head = None
        else:
            self.head = self.head.getNext()

        return removed_data

    # check if queue is empty
    def isEmpty(self):
        return not self.head

    # traverse all elements in queue
    def traverse(self):
        elements = []
        curr = self.head
        while curr:
            elements.append(curr.getData())
            curr = curr.getNext()

        return elements

    # this to reverse the list
    def reverse(self):
        """
            :return: void, doesn't return anything it reverse list in-place
        """
        current = self.head
        prev = None
        nex = current.getNext()
        while current:
            current.setNext(prev)

            prev = current
            current = nex
            if nex:
                nex = nex.getNext()

        self.head = prev

    # this to find the size of queue
    def size(self):
        """
            :rtype: return the length of list
        """
        current = self.head
        count = 0
        while current:
            count += 1
            current = current.getNext()

        return count

    # This to search for specific item and return True if exist False otherwise
    def search(self, item):
        """
                :type value: item [int, string .. etc]
                :rtype: Boolean, return True if item exist otherwise return False
            """
        # if not isinstance(item, Node):
        #     item = Node(item)

        current = self.head
        while current:
            if current.getData() == item:
                return True
            current = current.getNext()

        return False
Esempio n. 13
0
 def push(self, data):
     new_node = Node(data)
     new_node.setNext(self.head)
     self.head = new_node
class Stack:
    def __init__(self):
        self._min = None
        self.head = None

    def push(self, data):
        if self._min and (self._min.getData() < data):
            old_min = self._min
            self._min = Node ( self._min.getData() )
            self._min.setNext( old_min )
        else:
            old_min = self._min
            self._min = Node ( data )
            self._min.setNext( old_min )

        old_h = self.head
        self.head = Node ( data )
        self.head.setNext( old_h )

    def pop(self):
        if not self.head:
            return "Stack is already empty!"

        self._min = self._min.getNext()
        item = self.head.getData()
        self.head = self.head.getNext()

        return item

    def min(self):
        if not self._min:
            return None

        return self._min.getData()