两个单链表的非破坏性递归交叉

时间:2013-09-19 14:27:07

标签: java recursion intersection

我想要两个单链表(这个函数从一个内部调用)并创建第三个单链表,其中包含两者之间的所有交叉点。因此,如果p = [0,1,2,3]且q = [1,3,7,9]则out = [1,3],同时保留旧列表。

如你所见,我需要在两个地方宣布“出局”。但是,如果我通过再次调用该函数来触发声明,它自然会抹掉我之前写给它的内容。我真的无法弄清楚如何避免它。

可以使用http://docs.oracle.com/javase/7/docs/api/java/util/LinkedList.html生成单个链接列表。首先是我的标题。

public List intersection(List l) {
    if(first.data == l.first.data) {
        List lTail = new List(l.first.next);
        List tail = new List(first.next);

        List out = new List(new Node(first.data, null)); //Bad idea #1
        // System.out.println(out);

        return tail.intersection(lTail);
    } else if (first.data > l.first.data && l.first.next != null) {
        List lTail = new List(l.first.next);
        return intersection(lTail);

    } else if (first.data < l.first.data && first.next != null) {
        List tail = new List(first.next);
        return tail.intersection(l);
    } else { //When both lists are at the end position
        List out = new List(new Node(0, null)); // Bad idea #2
        return out;
    }
}

1 个答案:

答案 0 :(得分:0)

List<T> p = new LinkedList<T>();
p.add...
...
List<T> q = new LinkedList<T>();
q.add...
...
List<T> intersection = new LinkedList<T>(p);
intersection.retainAll(q);

现在intersection只包含两个列表中的元素,而列表本身保持不变。