Я пытаюсь добавить узел в связанный список, однако, когда я использую цикл while, чтобы проверить, установлено ли для «link» значение NULL, цикл выполняется, когда он не должен.
Это как если бы "cursor-> link" не был установлен в NULL, и код внутри цикла while выполняется, я помещаю туда оператор print только для его проверки, и он выполняется, хотя«курсор-> ссылка» установлен в NULL.Функция создания возвращает "узел *".
РЕДАКТИРОВАТЬ - Я извиняюсь, ребята, я отправил этот вопрос поздно ночью, и я думаю, что я, возможно, был не в лучшей форме, чтобы выразить себя должным образом.Кроме того, я все еще немного озадачен тем, как обрабатывать и работать со связанными списками (как, вероятно, показывает мой код).Мне дали шаблон для работы (так как в функциях append и display были предустановлены, и я должен работать с ними как есть).Компилятор не выдал никаких предупреждений с кодом как есть.Однако программа все еще падает в функции добавления вокруг цикла While.
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
typedef struct node {
int data;
struct node * link;
} node;
node* create(int data,node* link) {
node* newNode = (node*)malloc(sizeof(node));
newNode->data = data;
newNode->link = link;
return newNode;
}
void append ( node **, int ) ;
void display ( node * ) ;
int main() {
node *p ;
p=NULL;
int n;
char ch[10];
do {
printf("Enter the value\n");
scanf("%d",&n);
append(&p,n);
printf("Do you want to add another node? Type Yes/No\n");
scanf("%s",ch);
}while(!strcmp(ch,"Yes"));
printf("The elements in the linked list are");
display(p);
printf("\n");
return 0;
}
/* adds a node at the end of a linked list */
void append ( node **q, int num ){
node *cursor;
if (*q == NULL) {
*q = create(num, NULL);
node *cursor = *q;
}
while(cursor->link != NULL) {
printf("1\n");
cursor = cursor->link;
}
node* newNode = create(num, NULL);
cursor->link = newNode;
}
void display ( node *q ){
node *cursor = q;
while(cursor->link != NULL) {
printf(" %d", q->data);
cursor = cursor->link;
}
printf(" %d", cursor->data);
}