2014-02-23 147 views
0

我想從列表中刪除k數字元素。我會像下面這樣做(僞代碼)單鏈表,刪除k元素

delete(L,k) 

x <- L.head 
i <- 1 
while(i < k-1 AND x.next != NULL) 
    x<-x.next 
    i <- i+1 
if(i = k-1 AND x.next != NULL) 
    if(x.next.next != NULL) 
     x.next <- x.next.next 
    else if(x.next.next = NULL) 
     x.next = NULL 

我的目的是:如果k是最後一個,那麼刪除k-1.next。如果k不是最後一個,則將k-1.next指向k + 1。這是個好主意嗎?

回答

2

您的鏈接列表刪除方法似乎大多是正確的。

你爲什麼從一個數值計算?你想的頭是一個虛擬節點,它不包含任何值(那麼你就可以保持一個空列表),如果是這樣嘗試:當你要刪除的第一個項目

i=0 
while(i <= k && x.next != null) 

然後(K = 1) while循環將執行一次。否則,使用

while(i = k && x.next !=null) 

同樣,在第一個if語句變化k-1k

我不知道你爲什麼使用IF ELSE,因爲如果它的x.next.next爲null,那麼你只需要指定null。

問題是您的計數器值與刪除值。嘗試刪除列表中的第一項。

+0

謝謝。你的意思是L.head應該是空的? – user3162968

+0

接下來的事情:如果循環繼續,直到我= k,然後我們刪除k.next,我們刪除k + 1元素,不是嗎? – user3162968

+1

我的意思是,如果你想讓你可以使L.head總是空的作爲創建一個空鏈表(只包含頭部的列表)的一種方式。否則,當你刪除列表中唯一的項目時,你沒有列表。你不需要。 – user2590835