我无法通过输入记录的电话号码从链接列表中删除节点...这是应该执行此操作的代码:
typedef struct record
{
char name[20];
char surname[20];
char telephone[20];
}Record;
typedef struct node
{
Record data;
struct node *next;
}Node;
Node *head = NULL;
void delete() {
Node *n = head;
Node* previous = NULL;
Node *next = n;
int length;
int valid;
char telNumber[20];
char confirm = 1;
do {
valid = 0;
printf(" TELEPHONE NO. (8 digits) : ");
gets();
gets(telNumber);
length = strlen(telNumber);
for (int i = 0; i < length; i++)
{
if (!isdigit(telNumber[i]) || (length != 8))
{
printf("You enterred an invalid number\n");
valid = 1; break;
}
}
} while (valid == 1);
while (n != NULL) {
if (strcmp(&n->data.telephone, telNumber) == 0) {
if (previous == NULL) {
n = n->next;
free(head);
}
else {
previous->next = n->next;
free(n);
n = previous->next;
}
}
else {
previous = n;
n = n->next;
}
}
printf("You have successfully deleted the telephone record");
。 。 。 记录仍然存在。此外,当我有两条记录时,如果我尝试删除第一条记录,程序找不到它
答案 0 :(得分:2)
删除部分没有错误。也许头部未初始化并将空值传递给&#39; n&#39;。所以,因为&#39; n&#39;具有空值,删除是不可能的。或者更新的n值不会返回或正确传递给main函数。
答案 1 :(得分:2)
删除第一个节点时,您不会向前移动头部。
while (n != NULL) {
if (strcmp(&n->data.telephone, telNumber) == 0) {
if (previous == NULL) {
n = n->next;
free(head);
head = n; /* missing*/
}
...