Dies ist die Methode, die ich in C geschrieben habe. Sie wird in eine verkettete Liste eingefügt.Einfügen in die kreisförmige verknüpfte Liste (Ausgabe nicht wie gewünscht)
void insert_beg()
{
temp=(struct node*)malloc(sizeof(struct node));
ptr=(struct node*)malloc(sizeof(struct node));
int data_value;
printf("Enter the value\n");
scanf("%d",&data_value);
temp->info=data_value;
if(header->link==NULL)//when there is no node
{
header->link=temp;
temp->link=header;
}
else//when atleast one node has been created
{
ptr->link=header->link;//ptr is pointing to where header was pointing.
header->link=temp;
temp->link=header;
}
printf("\n\n");
}
Dies ist der Code für Traversal (grundsätzlich angezeigt)
void traverse()
{
ptr=header->link;
while(ptr->link!=header)
{
ptr=ptr->link;
printf("%d\t",ptr->info);
}
printf("\n\n");
}
Wenn das Programm ausgeführt wird, wird der Ausgang für Traversal nichts. Es ist, als ob die for-Schleife nicht läuft. Es gibt keinen Segmentierungsfehler beim Einfügen oder irgendetwas anderes. Ist meine Logik korrekt? Wenn nicht, wo gehe ich dann falsch?
Ich denke, die Bedingung sollte 'if (header == NULL)' sein. Dann 'temp-> link = ptr-> link'. Sonst würden Sie den ursprünglichen 'header-> link' – Sharad
in der' insert_beg'-Funktion verlieren, warum werden zwei Objekte von 'node' erzeugt? – PRP
@PRP wenn ich das PTR-Objekt entfernte, dann entsteht ein Problem mit dem else Teil des Codes. Ich habe einen Segmentierungsfehler erhalten. Also, warum .. – sindhugauri