2016-04-17 17 views
0

リンクリストの先頭に新しいノードを挿入する必要があります。私がデータパッケージを交換した後、私は最初のノードのデータを新しいデータで上書きしようとします。しかし、私がそれを行うと、私のプログラムは私の第1と第2のノードのデータ値を変更します。リンクリストの先頭にノードを挿入する

void insert(String iv_name, String iv_name_first, String iv_title, int iv_earning) { 
    if (this.first == null) { 
     this.first = new Node(new Data(iv_name, iv_name_first, iv_title, iv_earning, 0)); 
    } else { 
     Node n = this.first; 
     Data last_n_data = getLast().data; 
     Data[] datas = new Data[getLast().data.getId()]; 
     int j = 0; 
     while (n.next != null) { 
      datas[j] = n.data; 
      j++; 
      n = n.next; 
     } 
     j = 0; 
     n = this.first; 
     while (n.next != null) { 
      n.next.data = datas[j]; 
      n.next.data.setId(datas[j].getId() + 1); 
      j++; 
      n = n.next; 
     } 
     n.next = new Node(new Data(last_n_data.getName_last(), last_n_data.getName_first(), last_n_data.getTitle(), 
       last_n_data.getEarning(), last_n_data.getId() + 1)); 
     n.next.next = null; 

     this.first.data.setName_last(iv_name); 
     this.first.data.setName_first(iv_name_first); 
     this.first.data.setTitle(iv_title); 
     this.first.data.setEarning(iv_earning); 
     this.first.data.setId(0); 
    } 
} 

答えて

1

私はあなたがこれを不必要に複雑にしていると思います。リンクリストの先頭に挿入するにはあなたがする必要があるのはこれです:

void insert(String iv_name, String iv_name_first, String iv_title, int iv_earning) { 
    Node toCreate = new Node(new Data(iv_name, iv_name_first, iv_title, iv_earning, 0)); 
    toCreate.next = this.first; 
    this.first = toCreate; 
} 

このコードは単純に、新しいノードを作成し、それ新しい最初のノードになり、そしてそれは、すでにすべてのノードを指します存在する。したがって、ノードB-> C-> Dなら、最終結果はA-> B-> C-> Dとなります。

+0

'Data':' void insert(Data data) '。このコードは 'if-else'を削除して' toCreate.next = this.first; 'と' this.first = toCreate; 'の2つの行を保持するとうまく動作します。 –

+0

彼のコードの外観から、 'Node()'コンストラクタは 'Node'の内部に' Data'オブジェクトを設定することをすでに処理しています。あなたはif文について正しいです。 – nhouser9

関連する問題