了解在链表中删除哪个节点的最佳方法?

时间:2012-08-13 07:34:37

标签: java linked-list

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

根据我的观点,在传递链表之前,我们需要保留一个能够控制所有内容的数组 列表中每个节点的地址,删除后我们需要遍历并找出哪个节点被删除。

最好的方法是什么。

例如:

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

1 个答案:

答案 0 :(得分: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()的内容,然后它可以与任何大小的列表一起使用。