Я решаю проблему в вопросе об опросе о LinkedList.
вопрос в ...
Пишите код для удаления дубликатов из несортированного списка ссылок.если временный буфер не разрешен?
Я читал решение, и я не понимаю три части в решении.
Первый,
public static void deletedup(LinkedListNode n)
{
Hashtable table = new Hashtable();
LinkedListNode prev = null;
while(n != null)
{
if(table.containsKey(n.data))
prev.next = n.next; //<--
else
table.put(n.data, true);
prev = n;//<--
}
n = n.next;
}
Первый-1 вопрос,В решении, если таблица содержит дублированное ключевое слово.они должны перейти к следующему узлу.Я думал, что нам просто нужно, чтобы n = n.next.Тем не менее, решение было prev.next = n.next ;.Тем не менее, мы не совсем уверены, что предыдущая часть кода.Почему мы должны использовать пред?Более того, после помещения уникального ключевого слова в табличное решение присвойте n значение prev ( prev = n; ).Зачем нам это делать?
Второй,
public static void deletedup(LinkedListNode head)
{
LinkedListNode pre = head;
LinkedListNode cur = pre.next;
while(cur != null){
LinkedListNode runner =head;
while(runner != current)
{
if(runner.data == cur.data)
{
LinkedListNode tmp = current.next;
pre.next = tmp;//<---
current = tmp;//<--
break;
}
[...]
}
[...]
}
}
Второй вопрос, из второго решения, это программа поиска дублированных ключевых слов, мы должны ее удалить.Поэтому они объявляют узел tmp для удаления, чтобы удалить дублирующиеся ключевые строки.Тем не менее, я не совсем понимаю причину сделать "pre.next = tmp и cur = tmp". Я предполагаю, что "cur = tmp" обновит текущий до следующего узла.Однако я не совсем уверен в причинах ..
В-третьих, для большой части.Я предполагаю, что первое решение будет O (n), а второе решение будет O (n ^ 2).Это правильно?
спасибо