Example #1
0
 def insertfirst(self, data):
     self.counter += 1
     newNode = Node(data)
     if not self.head:
         self.head = newNode
     else:
         newNode.nextNode = self.head
         self.head = newNode
Example #2
0
    def insertStart(self, data):
        self.counter += 1
        newNode = Node(data)

        if not self.head:
            self.head = newNode

        else:
            newNode.nextNode = self.head
            self.head = newNode
Example #3
0
    def prepend(self, value):
        if self.head is None and self.tail is None:
            self.append(value)
        else:
            newNode = Node(value)
            newNode.next = self.head
            self.head.prev = newNode
            self.head = newNode
            self.length += 1

        return self
    def prepend(self, value):
        if self.head is None and self.tail is None:
            return self.append(value)

        node = Node(value)

        node.next = self.head

        self.head = node

        self.length += 1

        return self
Example #5
0
    def append(self, value):
        newNode = Node(value)

        if self.head is None and self.tail is None:
            self.head = newNode
            self.tail = newNode
        else:
            self.tail.next = newNode
            newNode.prev = self.tail
            self.tail = newNode

        self.length += 1

        return self
    def insertEnd(self, data):
        newNode = Node(data)
        actualNode = self.head

        while actualNode.nextNode is not None:
            actualNode = actualNode.nextNode

        actualNode.nextNode = newNode
    def insertAtIndex(self, index, value):
        # 需注意以下 index 的處理
        if index <= 0:
            self.prepend(value)
            return self.display()

        elif index >= self.length:
            self.append(value)
            return self.display()

        # 走尋到 (index-1) 的元素,再插入新元素
        holdNode = self.traverseToIndexNode(index-1)

        newNode = Node(value)
        newNode.next = holdNode.next
        holdNode.next = newNode
        self.length += 1

        return self.display()
Example #8
0
    def insertlast(self, data):
        if self.head is None:
            self.insertfirst(data)
            return

        self.counter += 1
        newNode = Node(data)
        actualNode = self.head
        while actualNode.nextNode is not None:
            actualNode = actualNode.nextNode
        actualNode.nextNode = newNode
Example #9
0
    def insertAtIndex(self, index, value):
        # 需注意以下 index 的處理
        if index == 0:
            self.prepend(value)
            return self.display()

        elif index >= self.length - 1:
            self.append(value)
            return self.display()

        holdNode = self.traverseToIndexNode(index - 1)
        nextNode = holdNode.next
        newNode = Node(value)

        holdNode.next = newNode

        newNode.prev = holdNode
        newNode.next = nextNode

        nextNode.prev = newNode

        self.length += 1

        return self.display()

class ModifyPrint(LinkedList):

    def reverse_print(self, k=0):

        if k > 0:
            s = Stack()
            current = self.head

            while current:
                s.push(current.data)
                current = current.next

            while k > 0:
                k -= 1
                print(s.pop())

        return


l = ModifyPrint()
l.add(Node(2))
l.add(Node(21))
l.add(Node(32))
l.add(Node(3))
l.add(Node(8))
l.add(Node(90))

l.reverse_print(3)