Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/314.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用虚拟节点实现链表_Java_Linked List_Set_Set Intersection_Set Union - Fatal编程技术网

Java 使用虚拟节点实现链表

Java 使用虚拟节点实现链表,java,linked-list,set,set-intersection,set-union,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

我正在做一个项目,在这个项目中,我必须合并并相交两个集合。我为每个虚拟节点集使用链表。这就是我初始化集合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

我的问题是,交叉点伪码的逻辑正确吗?我的联盟伪代码很可笑。有谁能指导我解决这个问题吗

您的想法将因以下简单输入而失败:

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.
  • 第一次迭代-我们有
    1
    2
    ,它们的值不相同,所以我们在这两个集合中进行下一次迭代
  • 第二次迭代-我们有
    2
    3
    ,它们的值不同,所以进入下一步
  • 结束
你真正需要的是:

  • 在不匹配时,只推进具有较低元素的列表
  • 在匹配时,添加到结果并同时前进(或者要删除重复项,只要重复相同的值,就同时前进)

对于union,想法非常相似:

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

不幸的是,我没有使用它。我的项目基于我自己使用LL@abhijithforunion实现的集合,我该怎么做@AbhijithIt只是一个简单的列表@AbhijithBut我确实需要删除重复的值,所以在这个意义上它是唯一的@到目前为止,AbhijithI已经添加了
插入
删除
,但我还需要添加
联合
交叉
差异
方法@你能解释一下第二点吗?我得到了两个if语句,它们用较低的元素推进列表,然后我有else语句推进列表,然后添加元素@Jiritousek哪一个是第二个?并集?两个输入都是排序的,我们保持不变的是“输入中的所有元素都高于输出中的所有元素”。一开始显然是这样。然后您总是添加并推进较低的输入,或者添加一个然后推进两个输入,因此它保持不变。这样,您就不会将重复的值放入输出中。
//loop over both sets and if both have same value add it otherwise 
// get to the next node in both sets.