我在这个论坛上进行了大量研究,发现了许多“解决方案”,但没有一个起作用。 也许我的情况有些不同,也许有人可以看到问题出在哪里。我需要删除每个“值”小于给定(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)
答案 0 :(得分:0)
当还需要删除头节点时,从链接列表中删除节点会有些棘手。一种更简单的方法是在开始处添加一个哨兵节点。以下Java代码说明了如何删除值小于给定值的节点。为了简单起见,我使用了一个int类型的值。
/*
// Node definition
class Node {
Node next;
int val;
Node(int val) {
this.val = val;
}
}
*/
public Node delete(Node head, int k) {
Node sentinel = new Node(Integer.MIN_VALUE);
sentinel.next = head;
Node prev = sentinel, curr = sentinel.next;
while(curr != null) {
while(curr != null && curr.val < k) {
curr = curr.next;
}
prev.next = curr;
prev = curr;
if(curr != null) {
curr = curr.next;
}
}
return sentinel.next;
}