反向非递归链表

时间:2018-08-13 07:46:50

标签: python-3.x doubly-linked-list

请检查以下反向功能。其余代码应该没问题。由于某种原因,该功能未反转双向链表。

public class SimpleCompletableFuture {
    public static void main(String... args) {
        testDownload();
    }

    private static void testDownload() {
        CompletableFuture future = CompletableFuture.supplyAsync(() -> downloadMock())
                .thenApply(SimpleCompletableFuture::processDownloaded);
        System.out.println(future.join());
    }

    private static String downloadMock() {
        try {
            Thread.sleep(new Random().nextInt() + 1000); // mock the downloading time;
        } catch (InterruptedException ignored) {
            ignored.printStackTrace();
        }
        return "Downloaded";
    }

    private static String processDownloaded(String fileMock) {
        System.out.println("Processing " + fileMock);
        System.out.println("Done!");
        return "Processed";
    }
}

双向链表节点结构

#!/bin/python3
import math
import os
import random
import re
import sys

双向链表结构

class DoublyLinkedListNode:
    def __init__(self, node_data):
        self.data = node_data
        self.next = None
        self.prev = None

按顺序从头到尾打印双向链表。

class DoublyLinkedList:
    def __init__(self):
        self.head = None
        self.tail = None

    def insert_node(self, node_data):
        node = DoublyLinkedListNode(node_data)

        if not self.head:
            self.head = node
        else:
            self.tail.next = node
            node.prev = self.tail
            self.tail = node

请检查以下反向功能,因为此功能不返回反向双向链表。检查是否有任何错误,并让我知道。

def print_doubly_linked_list(node, sep, fptr):
    while node:
        fptr.write(str(node.data))

        node = node.next

        if node:
            fptr.write(sep)

1 个答案:

答案 0 :(得分:0)

您将开始从head反转列表,该列表没有prev项,因此break不在您的while循环中。相反,应该从tail撤消操作:

llist1 = reverse(llist.tail)

通常,我认为您的函数reverse应该将整个列表(而不是头部或尾部)作为参数,然后从其中的项构建一个全新的DoublyLinkedList。这也将解决您的变量名的混乱,其中llistDoublyLinkedList,而llist1DoublyLinkedListNode

修改: 我忘记了,在insert_node中,如果还没有self.tail = node /第一个节点,您也应该创建head