2013-07-10 33 views
1

我從一本書經歷了鏈接列表中的問題,但我無法理解它想說什麼?查找鏈接列表的中間元素

是不是:1. finding middle element but looking from starting。這些線意味着什麼:

n is c???? 

LinkedListNode next = n.next; // next= d; 
6 n.data = next.data; // n.data=d; 
7 n.next = next.next; // c.next= e ??? 

我無法得到它,請你看看並告訴我嗎?

實施算法來刪除單個鏈接列表中間的節點,只給予該節點的訪問權限。

例如:
輸入:從鏈表節點 'C' A-> B-> C-> D->電子
結果:不返回任何結果,但新的鏈表看起來像A-> b-> d-> e

解決方案:
只需將數據從下一個節點複製到此節點,然後刪除下一個節點。
注意:如果要刪除的節點是鏈接列表中的最後一個節點,則無法解決此問題。沒關係 - 你的面試官希望看到你指出這一點。在這種情況下,您可以考慮將其標記爲虛擬。這是你應該與面試官討論的問題。

1 public static boolean deleteNode(LinkedListNode n) { 
2 if (n == null || n.next == null) { 
3  return false; // Failure 
4 } 
5 LinkedListNode next = n.next; 
6 n.data = next.data; 
7 n.next = next.next; 
8 return true; 
9 } 

這裏,有什麼能n?你能解釋第5,6,7行嗎?另外,如果n是最後一個元素,爲什麼它不工作?

我是新來的鏈接列表。我正在閱讀它的所有例子,但真的被困在這一個。

+0

帖子和標題似乎不匹配。有兩個問題嗎?此外,你是對的,該算法不適用於最後一個元素。 –

+0

@ZiyaoWei ,,號只有1個問題。我發佈的問題。 – user2387900

+0

@ZiyaoWei爲什麼它不起作用......你也可以表示第5,6,7行嗎? – user2387900

回答

1

該問題需要您從鏈接列表的中間刪除節點,只給出要刪除的節點的引用。

在這裏,可能是什麼?

n可以是對鏈表中任何「中」節點的引用,即不是第一個或最後一個節點。

你能解釋第5,6,7行嗎?

問題是,由於列表沒有雙向鏈接,因此您不能刪除給定的節點而不中斷鏈接列表(前一個節點將指向空)。

例如如果我們要刪除c,那麼b會指向哪裏?

A-> B-> C-> D->電子

A-> B->       D->電子

因爲我們不知道是什麼節點在c之前出現,我們無法再次鏈接列表。所以解決方法是將d的值複製到節點c中,然後刪除節點d。然後列表不會被破壞,並且您已經從中刪除了一個節點。然後舊節點c實際上將代表d節點,它將繼續節點e處的鏈接列表。

A-> B-> C-> D->電子

A-> B-> D->電子

這些線被簡單地複製從節點d的數據,並將其存儲在節點c中,以便可以刪除節點d。

如果n是最後一個元素,爲什麼它不起作用?

如果n是最後一個元素,則列表中的下一個節點爲空,所以我們沒有任何東西可以複製到當前節點中。

+0

非常感謝.. !!!我明白了.. – user2387900

0

你所指出的線執行以下操作:

n.data = next.data; 

副本從下一個節點的數據;

n.next = next.next; 

更改「now」節點的下一個鏈接;現在當前節點是「下一個」節點的完全相同的副本,並且下一個節點不能從列表頭開始到達。

換句話說,該算法實際上並不刪除當前節點 - 它將數據從下一個節點複製到當前節點,並從鏈接鏈中刪除下一個節點,從而導致當前節點上的數據丟失,當前節點作爲下一個節點,下一個節點被有效刪除。

如果當前節點是最後一個節點,則next.data將拋出NullPointerException。

+0

非常感謝.. !!!我得了.. – user2387900