从链表c#中删除最后一个节点
本文关键字:最后一个 节点 删除 链表 | 更新日期: 2023-09-27 18:16:02
我将元素添加到我的堆栈并在DataGridView中打印它们。它工作得很好。但是我不能移除最后一个元素。你能告诉我我的方法吗?
下面是我搜索最后一个节点的方法:public void RemoveLast()
{
STACKnode current = head, last;
while (current != null)
{
last = current;
current = current.next;
}
last = null;
}
但last = null
不移除节点。然而,如果我试图改变值last.item
,它将被改变。
链接列表的完整代码:
public class STACKnode
{
public STACKnode next;
public int item;
}
public class LinkedList
{
private STACKnode head;
public int currentItem;
public void AddLast(int item)
{
if (head == null)
{
head = new STACKnode();
head.item = item;
head.next = null;
}
else
{
STACKnode newSTACKnode = new STACKnode();
newSTACKnode.item = item;
STACKnode current = head;
while (current.next != null)
{
current = current.next;
}
current.next = newSTACKnode;
}
}
public void RemoveLast()
{
STACKnode current = head, last;
while (current != null)
{
last = current;
current = current.next;
}
last = null;
}
public void printAllNodes(DataGridView dataGridView1)
{
STACKnode current = head;
int i = 0;
dataGridView1.RowCount = 1;
while (current != null)
{
dataGridView1.Rows.Add("" + current.item);
current = current.next;
i = i + 1;
}
}}
对不起,我的英语不好
通过将null赋值给last,您只是更改了该变量的值。您应该做的是更改它之前节点的"next"属性,这样它们之间的链接将断开,从而有效地删除最后一项。这应该可以工作:
public void RemoveLast()
{
STACKnode current = head, last;
if (head == null) return;
if (head.next == null){
head = null;
return;
}
while (current.next != null)
{
last = current;
current = current.next;
}
last.next = null;
}
编辑:为空列表和单节点列表添加大小写。