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

时间:2015-10-03 13:29:17

标签: c# visual-studio stack singly-linked-list

我向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;
            }
        }}
抱歉,我的英文不好

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;
    }

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

相关问题