从链表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;
            }
        }}

对不起,我的英语不好

从链表c#中删除最后一个节点

通过将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;
    }

编辑:为空列表和单节点列表添加大小写。