2014-11-03 71 views
-3

下面的代碼片段會導致什麼結果?鏈接列表代碼示例

假定x是一個鏈表鏈接

a. x.setNext(x.getNext().getNext()); 


b. t.setNext (x.getNext()); 
    x.setNext (t); 

c. x.setNext(t); 
    t.setNext(x.getNext()); 
+0

添加語言標籤。 – 2014-11-03 03:12:16

+2

這看起來像家庭作業可疑。堆棧溢出不是「請爲我做我的作業」網站。 – rmunn 2014-11-03 03:13:18

+0

它的考試審查材料。不值得任何信用。不知道堆棧溢出是一個充滿'關心的管理員'的網站 – 2014-11-03 03:15:20

回答

1

解決這些都是通過圖中的最佳方式 - 它會幫助你瞭解了這麼多這麼容易。通過簡單的盒子代表每個節點&用箭頭連接它們。然後執行每個方法&。

這裏的第一個:

假設一個正常的鏈接列表與節點X,Y,Z順序連接:

Linked List with three elements

  • x.getNext()將導致node y
  • y.getNext()將導致node z
  • z.getNext()將導致null,因爲之後沒有更多的節點。
  • 同樣,x.getNext().getNext()會問「節點之後的下一個」,這是node z
  • setNext(n)顯然將下一個節點作爲n(以前的屬性被替換)

因此在聲明中x.setNext(x.getNext().getNext());,你知道x.getNext().getNext()變成node z。因此,你已經x.setNext(z);,這將導致以下:

Linked List with mid-delOperation

所以,現在你已經節點X &Ÿ指向到z。 Node x不能再指向node y,因爲您已將其設置爲指向node z。現在,就鏈接列表而言,您只需保存起始節點,即node x。你永遠不會有其他節點的引用。所以,你基本上已經失去了node y。有沒有辦法穿越/從一開始/ X找到它:

  • x.getNext()結果node z
  • z.getNext()結果null

所以,既然node y丟失,你的鏈接列表變得這樣的:

Linked List with two nodes (one deleted)

簡而言之,x.setNext(x.getNext().getNext());意味着在x後刪除節點。希望你能弄清楚另外兩個。