0

我遇到了一个问题,例如,如何知道链表中删除了哪个节点。例如:有一个包含多个节点的链表,链表传递给一个函数,该函数将删除一个任意节点并将列表返回..有没有办法知道哪个节点被删除了。

根据我的观点,在传递链表之前,我们需要维护一个数组,该数组将包含列表中每个节点的所有地址,删除后我们需要遍历并找出哪个节点被删除。

什么是最好的方法。

前任:

public class GetDeletedNode{
    public static void main(String args[]){
        LinkedList<String> ll = new LinkedList<String>();
        ll.add("a");
        ll.add("b");
        ll.add("c");
        ll.add("d");

        ll = deleteArbitaryNode(ll);

        //write code to get know which node got deleted.
        //
        //code goes here


        for(String str:ll){
            System.out.println(str);
        }
    }

    private static LinkedList<String> deleteArbitaryNode(LinkedList<String> ll) {       
        //delete arbitary node
        Random random = new Random();
        ll.remove((int)((long)3*random.nextDouble()+1));
        return ll;      
    }
}
4

1 回答 1

0

对“public E remove(int index)”的调用提供了删除的对象。

所以......像这样替换你的代码并将删除的节点返回给调用者:

public class GetDeletedNode{
    public static void main(String args[]){
        LinkedList<String> ll = new LinkedList<String>();
        ll.add("a");
        ll.add("b");
        ll.add("c");
        ll.add("d");

       // removes the random node and then returns it

        String removeObject  = deleteArbitaryNode(ll);

        for(String str:ll){
            System.out.println(str);
        }
    }

    private static T deleteArbitaryNode(LinkedList<T> ll) {       
        //delete arbitary node
        Random random = new Random();
        return ll.remove((int)((long)3*random.nextDouble()+1));      
    }
}

您可能还想将随机节点选择器重新设计为使用 List ans 中的 size() 的东西,然后它可以与任何大小的列表一起使用。

于 2012-08-13T07:44:08.527 回答