【问题标题】:Delete a node from a linked list after finding it找到后从链表中删除一个节点
【发布时间】:2016-08-13 04:17:17
【问题描述】:

我无法通过输入记录的电话号码从链表中删除节点。这是应该执行此操作的代码:

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;

。 . . (这里我写了输入数字的代码(存储在telNumber[20]中)并找到包含数字的记录

while (n != NULL) {
            if (&n->data.telephone == telNumber) {
                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");

记录仍然存在。

【问题讨论】:

    标签: c pointers struct linked-list nodes


    【解决方案1】:

    这个:

    if (&n->data.telephone == telNumber)
    

    不是如何在 C 中比较字符串是否相等。那将比较地址,这永远不会匹配。

    应该是:

    if (strcmp(n->data.telephone, telNumber) == 0)
    

    【讨论】:

    • 这确实解决了部分问题,谢谢。但是,当显示记录时,记录仍然存在。也许我需要退货?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-06-06
    • 2016-06-11
    • 1970-01-01
    • 1970-01-01
    • 2021-05-05
    相关资源
    最近更新 更多