2012-03-27 6 views
-2

Ich habe 3 verknüpften Liste und GewerkschaftsfunktionZeiger in C++ zeigt nicht die richtigen Werte

ab und Ergebnis sind Listen ich will Ergebnisliste mit Elementen füllen, aber es ist immer leer.

Haupt ist result.UnionSets(a,b) Funktion ist

void UnionSets(linkedlist & l1, linkedlist & l2) 
{  
    node<type> *temp= l1.tail; 
    if(temp!=NULL) 
    { 
     while(temp->next!=tail) 
     { 
      AddNode(temp->data); 
      temp=temp->next;    
     } 
    } 
    temp=l2.tail; 
    if(temp!=NULL) 
    { 
     while(temp->next!=tail) 
     { 
      AddNode(temp->data); 
      temp=temp->next; 

     } 
    } 
} 
+2

Ihren Code nicht klar ist, und würde nicht kompilieren, können Sie nach dem Code, wie es ist? – littleadv

+1

Was bedeutet das überhaupt? Was versuchst du zu machen? 'UnionSets' klingt, es sollte eine neue verkettete Liste erstellt werden, die die Elemente der ersten beiden Listen enthält. – eyesathousand

+0

Add Node ist auch eine Funktion Sie können diesen Teil ignorieren alles was ich will ist einige Werte in der Ergebnisliste zu füllen, aber es ist immer leer Ich denke, ich muss etwas tun wie this.add() oder das * .add so etwas nicht sicher –

Antwort

1

Ich muss einige Dinge über die Implementierung Ihrer verknüpften Liste annehmen. Wenn meine Annahmen falsch sind, dann ist meine Antwort auch falsch.

  1. Sie initialisieren Ihre temp Zeiger auf das tail Element ihrer verknüpften Listen. Die typische Nomenklatur beginnt bei head und arbeitet in Richtung tail. Außerdem ist es typisch, dass der letzte Knoten NULL als seinen nächsten Zeiger hat.

  2. Sie vergleichen Knoten einer verknüpften Liste mit Knoten in einer anderen verknüpften Liste. Sind die verknüpften Listen tatsächlich vernetzt? Oder sind sie eigentlich unabhängig voneinander?

diese beiden Punkte Unter Berücksichtigung versuchen Sie dies:

void UnionSets(linkedlist & l1, linkedlist & l2) 
{  
    node<type> *temp= l1.head; 
    while(temp!=NULL) 
    { 
      AddNode(temp->data); 
      temp=temp->next;    
    } 
    temp=l2.head; 
    while(temp!=NULL) 
    { 
      AddNode(temp->data); 
      temp=temp->next; 
    } 
} 
1

So etwas wie das?

static linkedlist Union(linkedlist& A, linkedlist& B) 
{ 
    linkedlist result; 
    for(linkedlist::iterator iter = A.begin(); iter != A.end(); ++iter) 
    { 
     result.append(*iter); 
    } 
    for(linkedlist::iterator iter = B.begin(); iter != B.end(); ++iter) 
    { 
     result.append(*iter); 
    } 
    return result; 
} 
+0

Ich nehme an, seine Aufgabe ist die Hausaufgabe, die der gegebenen API entsprechen muss, aber das ist eine wirklich gute Idee. –

+0

Ändern Sie 'linkedlist :: iterator' in' node * ',' A.begin() 'in' A.head', 'A.end()' in 'tail' (oder NULL) und' ++ iter' zu 'iter = iter-> next' und' append' zu 'AddNode'. Alles, was ich getan habe, ist, es so aussehen zu lassen, als ob es klar, gesund C++ wäre. Der Vorteil ist, dass dies leicht zu einer Template-Funktion für einen generischen Container gemacht werden kann. – eyesathousand