链接列表使用虚拟节点实现

时间:2017-02-20 18:51:56

标签: java linked-list set set-intersection set-union

我正在开展一个项目,我必须联合并交叉两套。我正在使用带有虚节点的每个集合的链表。这是我初始化我的集合LL类

的方法
public Set() {
 top = new Node(Integer.MIN_VALUE, new Node(Integer.MAX_VALUE, null) );
} //end Set

这就是我插入物品的方式。

public void insert(int item) {
 Node prev = top;
 Node curr = top.next;

 while( curr.item < item ) {
  prev = curr;
  curr = curr.next;
 }
 prev.next = new Node( item, curr);
 size++;
} // insert

现在我发现很难得到一个联合或两组的交集。 这就是我对交叉的想法。

public Set intersection( Set setB ) {
 Set setC = new Set ();
 //loop over both sets and if both have same value add it otherwise 
 // get to the next node in both sets.

我的问题是,我在交叉伪代码逻辑上是否正确?我的工会伪代码是可笑的。有人可以指导我这个问题吗?

1 个答案:

答案 0 :(得分:0)

这个简单的输入你的想法会失败:

1  2
2  3

你的想法:

//loop over both sets and if both have same value add it otherwise 
// get to the next node in both sets.
  • 第一次迭代 - 我们有12,不是相同的值,所以我们在两个集合中都进入下一个
  • 第二次迭代 - 我们有23,不是相同的值,所以转到下一个
  • 结束

你真正需要的是:

  • 在不匹配时,仅使用 lower 元素
  • 推进列表
  • 在匹配时,添加到结果并前进两者(或删除重复项,只要重复相同的值,就继续前进)

对于工会来说,这个想法非常相似:

  • 在不匹配时,添加较低的一个并前进包含较低元素的列表
  • 在匹配时,添加并推进两者(或者只要重复相同的值继续前进)