-1

作成中のカスタム リンク リストにこれら 3 つのメソッドを実装しようとすると、かなりのトラブルが発生します。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));

sysout で NullPointer 例外を返します

4

2 に答える 2

0

アイテムを作成しすぎています。insertは 2 つのアイテムを作成していますが、必要なのは最初のアイテムだけです。removeAtさらに 2 つのノードを作成しています。これらのほとんどを削除する必要があります。

以下の変更を行い、再度テストします。

MyNode before = get(pos-1);

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

編集:..でも不要ですMyNode current = new MyNode();get

編集:あなたの中心的な問題get、要素ではなくデータを返すことです。上記のように、を返すバージョンを作成し、Nodeそれをすべての内部メソッドで使用する必要があります。現在の方法では、リストに適切に挿入されていないためにすぐに破棄される新しいノードを作成しています。

于 2013-02-06T01:52:09.560 に答える
0

さて、あなたのget問題に関して、あなたはループから抜け出しています if pos != 0

また、リストの終了条件が間違っています。そうであってはなり< posません<= pos

また、ループが存在するときに current が null になり、null ポインター例外が発生する可能性があります。

于 2013-02-06T01:54:41.637 に答える