我在尝试为我在 C# 中创建的 LinkedList 类编写反向递归方法时遇到问题。LinkedList 中有 2 个指针,一个指向头部,另一个指向尾部:
public class Node
{
public object data;
public Node next;
public Node(object Data)
{
this.data = Data;
}
}
public class LinkedList
{
Node head;
Node tail;
public void Add(Node n)
{
if (head == null)
{
head = n;
tail = head;
}
else
{
tail.next = n;
tail = tail.next;
}
}
现在,递归反向函数如下所示:
public void reverse_recursive()
{
Node temp_head = head;
if (temp_head == tail)
{
return;
}
while (temp_head != null)
{
if (temp_head.next == tail)
{
tail.next = temp_head;
tail = temp_head;
reverse_recursive();
}
temp_head = temp_head.next;
}
}
我有两个问题:首先,一个逻辑问题,我知道 head 在反向之后没有指向第一个节点。第二个问题是我可能对空指针做错了,所以程序崩溃了。
我也给你主程序:
class Program
{
static void Main(string[] args)
{
LinkedList L = new LinkedList();
L.Add(new Node("first"));
L.Add(new Node("second"));
L.Add(new Node("third"));
L.Add(new Node("forth"));
L.PrintNodes();
L.reverse_recursive();
L.PrintNodes();
Console.ReadLine();
}
}
感谢您的帮助!!