我正在解決關於LinkedList的面試問題。鏈接列表:.next和temp鏈接列表節點的定義
問題是...
編寫代碼從一個無序鏈表 跟進 你會如何解決這個問題,如果不允許臨時緩衝區中刪除重複?
我正在閱讀解決方案,我不明白解決方案中的三個部分。
首先,
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。爲什麼我們必須使用prev? 此外,在將唯一關鍵字放入表格解決方案之後,將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)。這樣對嗎 ?
感謝
謝謝,我認爲,我有點了解列表大聲笑 – 2012-03-26 03:17:54
一個快速的問題 - 第二部分可以做得比O(n^2)更好嗎? – arya 2012-03-26 14:21:38