【发布时间】:2019-03-28 20:31:05
【问题描述】:
我在这个论坛上进行了大量研究,发现了许多“解决方案”,但没有一个有效。 也许我的情况有点不同,我也许有人可以看到问题出在哪里。我需要删除每个“值”小于给定(kruvis)的节点元素。
public void Delete()
{
if (Start == null) return;
if (Start.Next == null)
{
Start = null;
return;
}
if (Current.Next == null)
{
Current = null;
}
Node temp = Start;
while (temp.Next.Next != null)
{
if (temp.Next == Current)
{
temp.Next = Current.Next;
Current = temp;
return;
}
temp = temp.Next;
}
}
在不同的类中还有另一个函数(函数中的循环)
for (MenesioAgentai.Pradzia(); MenesioAgentai.ArYra(); MenesioAgentai.Sekantis())
{
if (MenesioAgentai.GautiT().Kruvis <= kruvis)
{
kruvioSuma += MenesioAgentai.GautiT().Kruvis;
PasalintiAgentoPrenumeratorius(pren, MenesioAgentai.GautiT());
MenesioAgentai.Delete();
}
}
问题是第一个和最后一个元素没有被删除 在 NodeList 类中,我有 3 个节点 Start、End、Current。 (以及带有 T 数据和 Node Next 的密封类 Node)
【问题讨论】:
-
删除链表中的第一个(开始)元素有什么难的,a-la Start = Start.Next ?要删除最后一个元素,您必须遍历列表以找到倒数第二个元素,然后执行 End = SecondLast.Next ... (哦,您还必须考虑列表只有一个元素的情况开始,结束,当前都是同一个元素)
-
我试过 if(Current==Start){ start=start.next return;} 但它不起作用..
-
我正在测试我的程序,当我将 value(kruvis) 设为最大数时(每次首先删除所有元素)它不起作用,它会跳过第一个元素,然后删除所有元素,直到最后一个元素
-
好吧,如果你只做
if(Current==Start){ Start=Start.next return;},那么这段代码执行后Current指的是什么? -
如果你在理解你对链表做什么(或应该做什么)有困难,我建议你拿笔和纸,在纸上“手动”练习列表操作,详细步骤-循序渐进的方式(包括所有涉及的“各方”,如开始、当前、结束等)。这既可以帮助您制定列表操作应该精确执行的“心理过程”,又可以为您提供在纸上以图形方式可视化过程的机会。
标签: c# algorithm linked-list