LinkedListに関するインタビューの質問で問題を解決しています。リンクリスト:.nextとtempリンクリストノードの定義
質問は一時バッファが許可されていない場合はどのようにこの問題を解決するだろうソートされていないリンクリスト FOLLOW UP から重複を削除するには...
コードを記述しているのですか?
私は解決策を読んでいましたが、解決策の3つの部分を理解していません。
まず、
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;。しかし、私たちはコード内で実際にはあまりよく分かりません。なぜprevを使わなければならないのですか? また、 テーブルソリューションにuniqueキーワードを入れた後、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;
}
[...]
}
[...]
}
}
2番目の質問、第二の溶液から、それはプログラム重複キーワードを見つけるには、我々はそれを削除する必要があります。したがって、重複するキーワードを削除するために削除するtmpノードを宣言します。 しかし、私は本当に理由を理解していない"pre.next = tmpとcur = tmp"。 私はthet "cur = tmp"が現在のノードを次のノードに更新すると推測しています。しかし、私は理由について本当に確信していません。
第三に、ビッグoの部分のために。私は最初の解がO(n)であり、2番目の解がO(n^2)であると仮定しています。そうですか?
おかげ
ありがとう、私はちょっとリストLOLを理解すると思います –
素早い質問 - 2番目の部分はO(n^2)よりもうまくいくでしょうか? – arya