2013-02-06 90 views
-1

我在嘗試在我創建的自定義鏈接列表中實現這三個方法時遇到了很多麻煩。即使我有一個現有的鏈接列表,get(int pos)方法對於除第0個索引之外的所有內容都將返回null!我的removeAt(int pos)和insert(int pos,int n)方法具有相同的麻煩。我會包括我認爲相關的一切。在自定義鏈接列表中獲取方法,插入和刪除方法

我的節點類

public class MyNode 
    { 
     public int cargo; 
     public MyNode next; 

     public MyNode() 
     { 
     cargo = 0; 
     next = null; 
     } 

     public MyNode(int i) 
     { 
     cargo = i; 
     next = null; 
     } 
    } 

我的自定義鏈接列表

public class MyLinkedList 
{ 
MyNode head; 
int size; 

public MyLinkedList() 
{ 
    head = null; 
    size = 0; 
} 

public int get(int pos) 
{ 
    MyNode current = new MyNode(); 
    for(int i = 0; i <= pos && current != null; i++) 
    { 
     if(pos == 0){ 
      current = head; 
     }else{ 
      current = current.next; 
      break; 
     } 
    } 
    return current.cargo; 
} 

public void insert(int pos, int n) 
{ 
    MyNode current = new MyNode(n); 
    MyNode before = new MyNode(get(pos-1)); 
    if(before.next != null) 
    { 
     before.next = current.next; 
    } 
    else 
    { 
     before.next = current; 
    } 
    size++; 
    System.out.println("Inserted " + n + " at position " + pos); 
} 
public void removeAt(int pos) 
{ 
    MyNode before = new MyNode(get(pos -1)); 
    MyNode remove = new MyNode(get(pos)); 
    MyNode after = null; 

    int cargo = remove.cargo; 

    if(remove.next != null) 
    { 
     after = remove.next; 
    } 
    before.next = after; 
    size--; 
    System.out.println("Removed " + cargo + " from position " + pos); 
} 
} 

我的測試數據

l.add(17); 
l.add(14); 
l.add(43); 
l.add(50); 
System.out.println(l.get(1)); 

回報s是系統空值的空指針異常

回答

0

您正在創建太多項目。 insert正在創建2個項目,只有第一個需要。 removeAt正在創建另外2個節點。其中大部分需要刪除。

進行以下更改並再次測試。

MyNode before = get(pos-1); 

MyNode before = get(pos -1); 
MyNode remove = get(pos); 

編輯:..在get即使MyNode current = new MyNode();是不必要的。

編輯:您核心問題get返回數據而不是元素,你應該寫一個返回Node版本和使用,在所有的內部方法,如上述。目前的方式讓你創建新的節點,因爲它們沒有被正確地插入到列表中而被立即銷燬。

0

那麼,關於你的get問題,如果pos != 0你打破了循環。

此外,您的列表退出條件是錯誤的。它應該是< pos而不是<= pos

另外,當循環存在時,current有可能爲null,然後會得到空指針異常。