【发布时间】:2018-04-26 07:34:37
【问题描述】:
我正在按照一些教程在 C# 中实现链表。这是我从该教程中复制的代码。
internal class Node
{
internal int data;
internal Node next;
public Node(int d)
{
data = d;
next = null;
}
}
internal class SingleLinkedList
{
public void printAllNodes()
{
Node current = head;
while (current != null)
{
Console.WriteLine(current.data);
current = current.next;
}
}
internal Node head;
internal void InsertFront(SingleLinkedList singlyList, int new_data)
{
Node new_node = new Node(new_data);
new_node.next = singlyList.head;
singlyList.head = new_node;
}
internal void InsertLast(SingleLinkedList singlyList, int new_data)
{
Node new_node = new Node(new_data);
if (singlyList.head == null)
{
singlyList.head = new_node;
return;
}
Node lastNode = GetLastNode(singlyList);
lastNode.next = new_node;
}
internal Node GetLastNode(SingleLinkedList singlyList)
{
Node temp = singlyList.head;
while (temp.next != null)
{
temp = temp.next;
}
return temp;
}
internal void InsertAfter(Node prev_node, int new_data)
{
if (prev_node == null)
{
Console.WriteLine("The given previous node Cannot be null");
return;
}
Node new_node = new Node(new_data);
new_node.next = prev_node.next;
prev_node.next = new_node;
}
}
}
现在我添加了一些节点并显示它,效果很好。
SingleLinkedList obj = new SingleLinkedList();
obj.InsertFront(obj, 7);
obj.printAllNodes();
obj.InsertFront(obj, 9);
obj.printAllNodes();
obj.InsertLast(obj, 345);
obj.printAllNodes();
现在我想使用我正在使用的“InsertAfter”功能,但它不能正常工作,它仍然显示旧节点。它有什么问题?
obj.InsertAfter(new Node(7), 10);
obj.printAllNodes();
【问题讨论】:
-
你正在为你的链表中不存在的 prev_node 创建新节点。然后您尝试向其添加下一个节点。这就是你失败的原因。在调用 InsertAfter 时不要使用
new Node(7),而是使用现有节点 -
如果你能写出来我会很高兴的。
-
小建议:您的 GetLastNode、InsertLast 和 InsertFront(成员)方法不需要 SingleLinkedList 参数。请改用关键字“this”或将方法设为静态。
标签: c# linked-list