2017-02-20 55 views
-1

Я работаю над проектом, где мне нужно объединить и пересечь два набора. Я использую Связанный список для каждого набора с фиктивными узлами. Вот как я инициализирую свои классы 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. 

Мой вопрос: я логически исправлен с псевдокодом пересечения? Мой союзный псевдокод смешон. Может ли кто-нибудь направить меня, хотя эта проблема?

+0

К сожалению, я не использую это. Мой проект основан на моей собственной реализации наборов с использованием LL @Abhijith – Saad

+0

Для объединения, как бы я это сделал? @Abhijith – Saad

+0

Это простой список. @Abhijith – Saad

ответ

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. 
  • Первая итерация - мы имеем 1 и 2, не то же самое значение, так что мы получаем в следующий в обоих наборах
  • Вторая итерация - есть 2 и 3, не такое же значение, поэтому добраться до следующего
  • End

Что вы на самом деле нужно:

  • На рассогласования, заранее только список с ниже элемента
  • На матч, добавить результат и продвижения как (или для удаления дубликатов, продолжайте движение до тех пор, пока повторяется одно и то же значение)

Для объединения, идея очень похожа:

  • На рассогласования, добавьте ниже один и заранее список, содержащий нижний элемент
  • На матче, добавлять и продвигать оба (или продолжаем двигаться вперед и как когда повторяется одно и то же значение)
+0

Не могли бы вы объяснить второй вопрос? Я получил два оператора if, и они продвигают список с более низким элементом, после чего у меня есть инструкция else, которая продвигает список, а затем добавляет элемент. @JiriTousek – Saad

+0

Какой из них «второй»? Союз? –

+0

Я говорил о союзе. – Saad