Ich versuche, ein einfaches Programm zu schreiben, um einen Knoten in eine verkettete Liste einzufügen. Hier ist, wie es aussieht:Pause verursacht Laufzeitfehler
#include <stdio.h>
#include <stdlib.h>
typedef struct
{
int data;
struct Node *next;
}Node;
void insert (Node **head, int data, int pos)
{
Node *left, *right, *newNode;
newNode = (Node *)malloc(sizeof(Node));
int i;
newNode->data = data;
right = *head;
if (pos == 0)
{
newNode->next = right;
*head = newNode;
}
else
{
for (i = 0; i<pos; i++)
{
left = right;
right = right->next;
if (right->next == NULL)
{
//break;
}
}
if (i == pos)
{
left->next = newNode;
newNode->next = right;
}
else
{
printf("Cannot insert at the given position");
}
}
}
void printLinkedList (Node *head)
{
while(head != NULL)
{
printf("%d\t", head->data);
head = head->next;
}
printf("\n");
}
int main(void) {
Node *head = NULL;
insert(&head, 1, 0);
printLinkedList(head);
//insert(&head, 2, 5);
//printLinkedList(head);
insert(&head, 2, 1);
printLinkedList(head);
insert(&head, 3, 1);
printLinkedList(head);
insert(&head, 4, 3);
printLinkedList(head);
return 0;
}
Alles funktioniert gut mit dieser Ausnahme der break-Anweisung im if (rechts-> nächste == NULL) Schleife. Ich möchte das hinzufügen, wenn die Eingabeposition ein Wert ist, der größer ist als die Länge der verknüpften Liste, dann breche ich einfach und drucke, dass wir keinen Knoten an dieser gegebenen Position einfügen können. Aber irgendwie gibt mir diese break-Anweisung einen Laufzeitfehler.
Was mache ich hier falsch?
Edit: Danke für die Eingänge Dieses es fest:
for (i = 0; i<pos; i++)
{
if (right == NULL)
{
break;
}
left = right;
right = right->next;
}
Ich versuchte dies und fügte hinzu: if (rechts-> nächste == NULL) { NOTFOUND = 1; } } if (NOTFOUND) { links-> next = newNode; newNode-> next = rechts; } Die Dinge funktionieren immer noch ... Ich sehe einen Fall, wenn rechts könnte NULL sein (Vielleicht, wenn ich versuche, in eine leere verkettete Liste mit einer Position einfügen, die nicht 0 ist), aber mit meinem aktuellen Beispiel in main.c sollte es idealerweise brechen bevor das Recht NULL wird –