我在特定索引(Java)中为链接列表中的节点编写了一个删除方法,但它没有对列表进行任何更改?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了我在特定索引(Java)中为链接列表中的节点编写了一个删除方法,但它没有对列表进行任何更改?相关的知识,希望对你有一定的参考价值。

代码不对输出进行任何更改,只是重新打印原始链表,我不知道问题是我的删除方法还是我用于堆栈的访问说明符。

  1. 项目清单

公共静态类Stack {

     Node first; *// newest node added*
    private int size;
     class Node
    {  
           String item;
           Node next; 

    }
    public Node delete(int index,Stack list)
    {  

        if (list.first== null) {
            return null;
        } else if (index == 0) 
        {
            return list.first.next;
        }
        else
        {
            Node n = list.first;
            for (int i = 0; i < index - 1; i++) 
            {
                n = n.next;
                if(i==index)
                n.next = n.next.next;//skips over the existing element

            }
            return list.first;
        }
        }

}

//客户端测试代码

public static void main(String[] args) {


        StdOut.print("Type the linked list:");
        Stack list = new Stack();
        int index;
        String in=StdIn.readLine();
        for(int i=0;i<=in.length();i++)
        {
         list.push(in);
        }
        StdOut.print("Type the index to be deleted:");
        index=StdIn.readInt();
        StdOut.println("Before deleting element at "+ index);
        StdOut.println(in);



        StdOut.println("After deleting element at "+ index);
        StdOut.print(list.delete(index,list).item);


}

}

答案

在你的delete()函数中,你将返回list.first - 它指向列表的头节点,而不是Node first* //newest node added*,对吗?我认为你应该在删除任务完成后从函数返回,而不是返回nullnode

此外,当您在最后的else语句中遍历列表时,应该将n = n.next;行移动到索引检查下方。

你的delete()函数看起来像这样:

public Node delete(int index,Stack list)
{  

    if (list.first== null) 
    {
        return;
    } else if (index == 0) 
    {
        return;
    }
    else
    {
        Node n = list.first;
        for (int i = 0; i < index; i++) 
        {
            //If the next Node of the current node is +1 the current index
            if(i+1==index)
            {
                n.next = n.next.next;//skips over the existing element
                return;
            }

            n = n.next;

        }
        return;
    }
 }

而且:

list.delete(index,list).item; //call the delete function
StdOut.println("After deleting element at "+ index);
list.print(); //Print the list using its print function (assuming you have one)

我希望这有帮助!

以上是关于我在特定索引(Java)中为链接列表中的节点编写了一个删除方法,但它没有对列表进行任何更改?的主要内容,如果未能解决你的问题,请参考以下文章

从单链接列表中删除节点 - 使用MALLOC / FREE

如何删除链接列表中的第一个节点?

Mailchimp API 节点 - 根据标签为列表创建活动

c_cpp 编写一个函数以获取链接列表中的第N个节点

使用节点js的地图中列表中特定索引处的Dynamodb sdk更新条目

不能只删除链接列表中的最后一个元素! (所有其他具有特定值的元素都会被删除)