问题是我需要编写一个递归算法来反转单链表L,这样节点的排序就会相反。 它似乎有点抽象,但我不需要代码或任何东西,因为问题请求算法,我有点卡住。 我不知道是不是要开始,我的意思是我有一些关于链表的简单事情,比如添加到前面和删除但是,反转(尤其是递归)看起来像墙。
答案 0 :(得分:2)
由于你不需要提供特定的代码,如果我甚至给你伪代码,我会做你的功课,所以我会给你一些提示; - )
一般方法是做
要反转1 -> 2 -> 3
,它就像
reverse(1 -> 2 -> 3)
= reverse(2 -> 3) -> 1
= reverse(3) -> 2 -> 1
= reverse() -> 3 -> 2 -> 1
= emptyList -> 3 -> 2 -> 1
= 3 -> 2 -> 1
答案 1 :(得分:1)
考虑双节点列表的简单情况:A-> B-> NULL。您如何反转该列表以使其变为B-> A-> NULL?
如果你仍然无法得到它,想象一堆Legos是一个链表。通过断开连接和重新连接连音来执行现实生活中的重新排序,并记下您执行的每个步骤。
答案 2 :(得分:0)
让我们定义一个方法reverse(L, n)
,它反转L中的第一个n ≤ L.size()
节点,并在L (end = null if n = L.size())
中的第n个节点后面的节点返回指针结束{{1}我们完成了,所以让我们假设L至少有2个节点。如果是L.size() ≤ 1
,那么我们返回n = 1
否则,我们递归调用L.first().next()
并让end表示返回L中指向第n个节点的指针。然后我们将ret设置为reverse(L, n - 1)
if { {1}},否则为null。然后我们在L的前面插入end指向的节点,然后返回ret。
仅供参考,总运行时间为O(n)。