2017-04-02 4 views
0

私が取り組んでいるカスタムのリンクリストラボでは、このメソッドを追加しています。新しいノードを挿入すると、値を1つのインデックスだけシフトする方法がわかりません。ここに私のソースコードです。カスタムLinkedListクラスのメソッドを追加

public void add(int index, Object element) throws IndexOutOfBoundsException { 
    if(index > size() || index < 0) { 
     throw new IndexOutOfBoundsException(); 
    } 

    ListNode newNode = new ListNode(element, null); 

    if(head == null) { 
     head = newNode; 
     return; 
    } 

    ListNode nextNode = head.nextNode; 
    ListNode currNode = head; 

    int i = 0; 
    while(currNode!= null) { 

     if(index == i) { 
      break; 
     } 

     currNode = nextNode; 
     //Breaks down here with null pointer exception 
     nextNode = nextNode.nextNode; 

    } 

    currNode = newNode; 
    currNode.nextNode = nextNode; 
} 
+1

LinkedListは、配列と異なり、理想的にはインデックス番号を持たないようにしてください。これがLinkedListの背後にあるコンセプトです。 –

+0

@PritamBanerjee理由を説明できますか?私は最近、このリンクリスト関数をcppにビルドします。ありがとう – Omore

+1

リンクされたリストは、束ねられたノードの束です。各ノードは、次のノード(単一リンクリスト)についてのみ知っています。 – jmw5598

答えて

2

最後のノードを反復しているときに次のノードがnullを指すように、ポインタをスローしています。最後に新しいノードを追加する必要がある場合も、次のノードポイントがnullになるかどうかを確認します。

また、あなたのコードでは、私は常に全リストを反復しています。

0

あなたがここで達成しようとしていることは本当にわかりませんが、私は@Pritam Banerjeeのコメントに同意します。しかし、あなたのコードで明白な問題は、あなたが私をインクリメントすることは決してないので、あなたはwhileループから抜け出すことはなく、ある時点であなたのリストの終わりに達することになり、nextNode.nextNodeはnullになり、したがってあなたの例外。 (nextNode.nextNodeは、currNodeが入る前にnullになることにも注意してください。)

関連する問題