2012-07-18 46 views
0

我想實現一個方法,它需要一個整數和一個鏈接作爲輸入,並將鏈接插入鏈表之前的鏈接在位置輸入整數,我已經實現了:insertBefore(int x,Link l)LinkedList Java

public void insertBefore(int num, String data) 
{ 
    Link current = head; 
    int count = 0; 
    while (current.next != null) 
    { 
     if(count == num) { 
     Link n = new Link(data); 
     n.next = current; 
     current.next = n.previous; 
     } 
    } 
    current = current.next; 
    count++; 

    } 

但是,當我cal方法沒有任何反應和鏈接沒有插入,所以任何人都知道該方法的問題?

+3

嗯,你的增量是外循環。事實上,這個代碼會無限循環,除非列表只有一個頭(如果它是空的並且沒有頭,它將會拋出一個NPE)。 – 2012-07-18 23:07:52

回答

1

如前所述,您的迭代構造不在迭代機制中。此外,您忘記將當前的前一個元素設置爲指向新鏈接。不知道你使用的是什麼樣的鏈表,但這是一個改進。

if (count == num) { 
    Link n = new Link(data); 
    n.next = current; 
    current.previous.next = n; 
    n.previous = current.previous; 
    current.previous = n; 
} 

針對下面的評論,更完整的改進基於代碼:

public void insertBefore(int num, String data) 
{ 
    Link current = head; 
    for (int count = 0; count < num && current.next != null; ++count) 
    { 
     current = current.next; 
    } 
    Link n = new Link(data); 
    n.next = current; 
    if (current.previous != null) 
     current.previous.next = n; 
    n.previous = current.previous; 
    current.previous = n; 
} 
+0

這仍然不能解決問題。你沒有改變'current'和'while'的條件是基於'current.next'。它也忽略了這樣一個事實,即通過使用它作爲條件,如果列表只包含頭部,則不能插入。 – 2012-07-18 23:13:13

+0

這是正確的,但我不想觸摸循環構造,因爲它已被提及。循環條件應該包括一個針對num的計數檢查,因此循環條件不會在修改列表的代碼中設置,只能在代碼中迭代它。 – 2012-07-18 23:16:00

+0

公平 - 我也沒有注意到'家庭作業'標籤 – 2012-07-18 23:17:16