Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/visual-studio/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从链表c中删除最后一个节点#_C#_Visual Studio_Stack_Singly Linked List - Fatal编程技术网

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

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;

我将元素添加到堆栈中,并在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;
    }

编辑:为空列表和单节点列表添加了一个案例。

通过将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;
    }
编辑:为空列表和单节点列表添加了一个案例