gpt4 book ai didi

c# - 链表第一个和最后一个元素不能删除

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:37:33 27 4
gpt4 key购买 nike

我在这个论坛上进行了大量研究,发现了许多“解决方案”,但没有一个有效。也许我的情况有点不同,我也许有人能看出问题出在哪里。我需要删除每个“值”小于给定(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 个节点开始、结束、当前。 (以及带有 T 数据和 Node Next 的密封类 Node)

最佳答案

当头节点也需要删除时,从链表中删除节点有点棘手。更简单的方法是在开头添加一个哨兵节点。以下 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;
}

关于c# - 链表第一个和最后一个元素不能删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55406384/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com