функция обратного двойного связанного списка не работает - PullRequest
0 голосов
/ 01 марта 2019

Все остальное работает, кроме функции реверса.Цикл while не заканчивается.Я добавлю более подробно.Я так виноват.Это мой второй раз, когда я получаю помощь от переполнения стека.

Это полный код.Я не уверен, как отправить хвост для обратной функции.

Большое спасибо.Я действительно ценю вашу помощь.

    import math
    class Node:
        def __init__(self, val, next = None, prev = None):
            self.data = val
            self.next = next
            self.prev = prev

    class LinkedList:
        def __init__(self):
            self.head = None
            self.tail = None
            self.count = 0

        def StartInsert(self, val):
            newNode = Node(val)
            if self.count == 0:
                self.head = newNode
                self.tail = newNode
            else:
                self.head.prev = newNode
                newNode.next = self.head
                self.head = newNode
            self.count += 1

        def EndInsert(self, val):
            newNode = Node(val)
            if self.count == 0:
                self.head = newNode
                self.tail = newNode
            else:
                self.tail.next = newNode
                newNode.prev = self.tail
                self.tail = newNode
            self.count += 1

        def MiddleInsert(self, val):
            newNode = Node(val)
            if self.count == 0:
                self.head = newNode
                self.tail = newNode
            else:
                index = math.ceil(self.count/2)
                temp = self.head
                while index > 0:
                    temp = temp.next
                    index =- 1
                temp.next = Node(val, temp.next)
                temp.prev = Node(temp.prev.data, temp)
            self.count +=1

        def search(self, val):
            p = self.head
            while p is not None:
                if p.data == val:
                    return p
                p = p.next

        def delete(self, val):
            curNode = self.head
            while curNode != None:
                if curNode.data == val:
                    if curNode.prev != None:
                        curNode.prev.next = curNode.next
                    else:
                        self.head = curNode.next

                    if curNode.next != None:
                        curNode.next.prev = curNode.prev
                    else:
                        self.tail = curNode.prev

                    self.count -= 1

                curNode = curNode.next

        def reverse(self):
            temp = None
            current = self.head
            while current != None:
                temp = current.prev
                current.prev = current.next
                current.next = temp
                current = current.prev
            if temp:
                self.head = temp.prev
                self.tail= 


        def traverse(self):
            s = ""
            p = self.head
            while p is not None:
                s += str(p.data) + ' ';
                p = p.next
            print(s + "| count: " + str(self.count))


list = LinkedList()
list.EndInsert("a")
list.StartInsert("b")
list.StartInsert("c")
list.EndInsert("d")
list.MiddleInsert("c")
list.traverse()
print("_________________")
list.reverse()
list.traverse()
...