请检查以下反向功能。其余代码应该没问题。由于某种原因,该功能未反转双向链表。
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)
答案 0 :(得分:0)
您将开始从head
反转列表,该列表没有prev
项,因此break
不在您的while
循环中。相反,应该从tail
撤消操作:
llist1 = reverse(llist.tail)
通常,我认为您的函数reverse
应该将整个列表(而不是头部或尾部)作为参数,然后从其中的项构建一个全新的DoublyLinkedList
。这也将解决您的变量名的混乱,其中llist
是DoublyLinkedList
,而llist1
是DoublyLinkedListNode
。
修改:
我忘记了,在insert_node
中,如果还没有self.tail = node
/第一个节点,您也应该创建head
。