我正在编写自己的单一链表用于学习目的,但我坚持使用“获取”方法。
public void Get(int index)
{
SLElement curr = _root;
SLElement prev = _root._next;
for (int i = 0; i <= index; i++)
{
while (curr._next != null)
{
if (curr == null) return;
prev = curr;
curr = curr._next;
}
}
prev._next = curr._next;
curr._next = prev;
Console.WriteLine("Index {0} has the value {1}", index, curr._value);
}
它似乎有效,但是当我想知道列表中最后一个元素的值时,它会给我一个NullReferenceException
有什么方法可以防止这种情况吗?
答案 0 :(得分:2)
因为它从0开始,所以for()
循环应该在i = index - 1
(即i < index
)时停止:
for (int i = 0; i < index; i++)
第一个元素位于0位置,因此最后一个元素位于index - 1
位置。
答案 1 :(得分:1)
我现在就这样工作了:
public void Get(int index)
{
SLElement curr = _root;
SLElement prev = _root._next;
for (int i = 0; i <= index; i++)
{
while (curr._next != null)
{
if (curr == null) return;
prev = curr;
curr = curr._next;
}
}
Console.WriteLine("Index {0} has the value {1}", index, curr._value);
if (prev == null) return;
prev._next = curr._next;
curr._next = _root;
}
这对我有用