C# 从链表c中删除最后一个节点#
我将元素添加到堆栈中,并在DataGridView中打印它们。很好用。但我不能删除最后一个元素。你能帮我学习一下我的方法吗 以下是我如何搜索最后一个节点:C# 从链表c中删除最后一个节点#,c#,visual-studio,stack,singly-linked-list,C#,Visual Studio,Stack,Singly Linked List,我将元素添加到堆栈中,并在DataGridView中打印它们。很好用。但我不能删除最后一个元素。你能帮我学习一下我的方法吗 以下是我如何搜索最后一个节点: public void RemoveLast() { STACKnode current = head, last; while (current != null) { last = current;
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;
}
编辑:为空列表和单节点列表添加了一个案例。通过将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;
}
编辑:为空列表和单节点列表添加了一个案例。通过将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;
}
编辑:为空列表和单节点列表添加了一个案例。通过将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;
}
编辑:为空列表和单节点列表添加了一个案例