Java 使用虚拟节点实现链表
我正在做一个项目,在这个项目中,我必须合并并相交两个集合。我为每个虚拟节点集使用链表。这就是我初始化集合LL类的方式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
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,想法非常相似:
- 在不匹配时,添加较低的元素并推进包含较低元素的列表
- 在匹配时,添加并同时前进(或者只要重复相同的值,就继续前进)
插入
和删除
,但我还需要添加联合
、交叉
和差异
方法@你能解释一下第二点吗?我得到了两个if语句,它们用较低的元素推进列表,然后我有else语句推进列表,然后添加元素@Jiritousek哪一个是第二个?并集?两个输入都是排序的,我们保持不变的是“输入中的所有元素都高于输出中的所有元素”。一开始显然是这样。然后您总是添加并推进较低的输入,或者添加一个然后推进两个输入,因此它保持不变。这样,您就不会将重复的值放入输出中。
//loop over both sets and if both have same value add it otherwise
// get to the next node in both sets.