请检查下面的反转功能。剩下的代码应该没问题。由于某种原因,该函数没有反转双链接列表。
#!/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)
请检查下面的反向函数,因为此函数不会返回反向双链接列表。检查是否有任何错误并让我知道。
def reverse(head):
if head == None:
return head
temp = None
curr = head
while(curr is not None):
temp = curr.prev
curr.prev = curr.next
curr.next= temp
curr = curr.next
if temp is not None:
head = temp.prev
return head
if __name__ == '__main__':
fptr = open(os.environ['OUTPUT_PATH'], 'w')
t = int(input())
for t_itr in range(t):
llist_count = int(input())
llist = DoublyLinkedList()
for _ in range(llist_count):
llist_item = int(input())
llist.insert_node(llist_item)
llist1 = reverse(llist.head)
print_doubly_linked_list(llist1, ' ', fptr)
fptr.write('\n')
fptr.close()
您开始从标题
开始反转列表,该标题没有prev
项,因此将
从
while
循环中打断。相反,从尾部反转应该:
llist1 = reverse(llist.tail)
一般来说,我认为你的函数
reverse
应该把整个列表(而不是头部或尾部)作为参数,然后根据其中的项目构建一个全新的DoublyLinkedList
。这还可以解决与变量名之间的混淆,其中llist
是DoublyLinkedList
,而llist1
是DoublyLinkedListNode
。
编辑:我忘了,在
节点/第一个节点。insert_node
中,您还应该制作self。tail=节点
如果还没有头
我做了一个使用递归方法反转单链表的函数。然而,我在执行下面的代码时遇到了一些困难: 我应该如何在ReverseCursive函数/方法中传递第二个参数,以便执行它? 作为第二个参数,我想简单地传递链表的头节点。但是我不知道如何从类的init方法中获取头节点linked_list 我试了几件事,但都解决不了。也许我不太擅长OOP概念。有人能帮我解决这个问题吗?
问题内容: 我已经在一个类的Java项目上工作了一段时间。它是链表(此处称为,包含称为的简单节点)的实现。问题是,一切都必须使用递归算法来完成。我可以用一种方法来做所有的事情: 现在,我的函数只是调用一个带有参数以允许递归的辅助函数。 我的助手功能具有的签名。 目前,我使用堆栈来迭代工作,但这不是规范所要求的。我在C语言中找到了一种算法,该算法可以递归地将其递归逆转并将其转换为Java代码,并且可
本文向大家介绍单链表反转 递归法Java实现相关面试题,主要包含被问及单链表反转 递归法Java实现时的应答技巧和注意事项,需要的朋友参考一下 经历了很多面试,面试官最爱考察的算法无非是斐波那契数列和单链表反转,尽管是这些都是基础知识,然而我对单链表反转有更多的想法。 递归法是我早期最爱在面试中使用的算法,很有逼格,写起来非常优雅,非常好理解。 先定义链表数据结构 如上代码所示 递归法会逐层确定该
我有脚本谁搜索最近的搜索号码。例如,假设数组中有以下数字: '0' = '0.25' = '0.75'= '1' = 我正在寻找0.50的差点,所以0.25和0.75在0.50的相同范围内。 在这种情况下,我想得到更大的数值,在这个例子中是0.75。 有效的代码是: 我知道我可以在这里使用递归,但我没有使用递归的经验。我知道我需要这样称呼它: 但即使我转储函数输出,也会得到空白页。
还缺少的是将最后一个节点的next赋值为NULL。 在任何世界里,像这样的东西会起作用吗?它给出了一个运行时/分段错误。