我向Stack添加元素并在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;
}
}}
抱歉,我的英文不好
答案 0 :(得分:3)
通过将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;
}
编辑:为空列表和单节点列表添加了一个案例。