我目前正在学习剑桥数据结构书,每当我想到问题时,在我看到解决方案之前,我都试图解决它。
我遇到RemoveLast()
public void RemoveLast()
{
if (end != null)
{
Node runner = start; //if end != null then start is initialized.
while (runner != end)
{
runner = runner.Next;
}
runner.Next = null;
end = runner;
}
}
我的代码有什么问题?大家好!
答案 0 :(得分:1)
考虑循环条件:
while (runner != end)
在循环结束时,runner
等于end
。因此,您基本上将end.Next
设置为null
并将end
设置为自己。
您需要在end
节点之前到达节点。
将循环条件更改为:
while (runner.Next != end)
这将确保在循环结束时,runner
将成为end
节点之前的节点。
请注意,此代码不处理start
等于end
的情况(当链接列表只包含一个节点时)。