2016-04-17 23 views
0

Ich muss einen neuen Knoten am Anfang meiner verketteten Liste einfügen. Nachdem ich die Datenpakete gewechselt habe, versuche ich die Daten meines ersten Knotens mit den neuen Daten zu überschreiben. Aber wenn ich das tue, ändert mein Programm die Datenwerte meines ersten und zweiten Knotens.Knoten am Anfang einer verketteten Liste einfügen

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); 
    } 
} 

Antwort

1

Ich denke, Sie machen dies unnötig komplex. zu Beginn einer verknüpften Liste aller Sie, dies zu tun, benötigen einfügen: die neuen ersten Knoten, einen neuen Knoten erzeugt, macht es

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; 
} 

Dieser Code einfach und es zeigen Sie auf alle Knoten macht, die bereits existieren. Also, wenn Sie Knoten B-> C-> D hätten, wäre Ihr Endergebnis A-> B-> C-> D

+0

Ich denke, es ist besser, wenn Sie ein 'Data' einfügen: 'void einfügen (Daten) '. Der Code funktioniert auch, wenn Sie 'if-else' entfernen und zwei Zeilen beibehalten:' toCreate.next = this.first; 'und' this.first = toCreate; '. –

+0

@ ĐăngKhoaHuỳnh Der 'Node()' -Konstruktor behandelt aus dem Aussehen seines Codes bereits das Einrichten eines 'Data'-Objekts innerhalb des' Node'. Sie haben Recht mit der if-Anweisung. – nhouser9

Verwandte Themen