2017-03-08 3 views
-4

in Java ich einen Knoten zu einer verknüpften Liste hinzufügen kann nicht, wenn ich zum Beispiel null besuchenUnterschied in verkettete Listen zwischen C und Java

void add(int val,node k){ 
    while(k!=null) 
    k=k.right; 
    k=new node(val,null); 
} 

Wo, wie in C

void add(ll* ll1,int val){ 
    node* neu=(node*)malloc(sizeof(node)); 
    neu->val=val; 
    neu->right=NULL; 
    if(ll1->head==NULL){ 
     ll1->head=neu; 
     return; 
    } 
    node** curr=&(ll1->head); 
    while(*curr){ 
     curr=&((*curr)->right); 
    } 

    (*curr)=neu; 
} 

mich hinzufügen Knoten, wenn ich NULL besuche. Kann mir bitte jemand den Unterschied erklären Warum funktioniert das so?

Es tut mir leid, wenn meine Frage ist schlecht erklärt. (Man kann in den Kommentaren fragen, besser zu verstehen)

+0

Weil Java versucht, eine "sichere" Sprache zu sein, und C nicht vorgibt, eins zu sein. C ist daher leistungsfähiger, wenn es um bestimmte Anwendungen geht. – StoryTeller

+0

In Ihrem C-Codebeispiel gibt es keine "besuchende NULL" - es funktioniert genauso wie Java, indem Sie den Knoten am Ende der Liste hinzufügen. –

+0

Funktioniert Ihr C-Code tatsächlich? Ich dachte, es würde genauso funktionieren wie in Java. – anacron

Antwort

0

In C, Sie haben eine gut definierte Stelle im Speicher, wo Sie diese null begegnen. Dann ersetzen Sie diesen Nullwert durch Ihren neuen Knoten.

In Java versuchen Sie, einen neuen Knoten in der Mitte von Nirgendwo zu setzen. Diese Null ist nicht mehr mit etwas verknüpft. Sicher, Sie wissen, es kam von k.right, aber Sie haben an diesem Punkt k = new Sie nur den Nullwert, nicht seine Adresse. Anders als in C. Also, es gibt keine Möglichkeit, einen neuen Knoten irgendwo anzuordnen, und Sie erhalten einen Fehler.

Wie Sie selbst herausgefunden haben, verwenden Sie einfach den k.right!=null Scheck. Dies ist im Wesentlichen das, was der C-Code auch tut, nur versteckt hinter einer anderen Schicht von Zeigern.

+0

Hat die Java-Version auch keine Möglichkeit, den ersten Knoten zurück zu geben, wenn er erstellt wurde? –

+0

@ChrisTurner Sie meinen, wenn Sie diesen Knoten nicht initialisieren, können Sie ihn erstellen und zurückgeben? Mit der Funktion wie geschrieben, nein - wenn Sie diese Funktion node = null geben, gibt es keine Möglichkeit, etwas zu erstellen und zurückzukehren. Aber zum Beispiel, wenn Sie es übergeben "linkedListStart", das ist eine Struktur, die einen Knoten enthält (der Null sein könnte), dann könnten Sie den ersten Knoten auf die Liste setzen. Was der C-Code tatsächlich macht - es gibt eine 11, die "Kopf" = ersten Knoten hat. Und wenn dieser erste Knoten Null ist, lege den frisch erstellten Knoten dorthin. Wenn 11 selbst Null ist, stürzt es ab. –

Verwandte Themen