BlackCat30 2021-11-25 14:47 采纳率: 80%
浏览 93
已结题

C语言 链表 VS读取访问权限冲突


#include<stdio.h>
#include<stdlib.h>
typedef struct node {
    int value;
    struct node* next;
}Node;
typedef struct List {
    Node* head;
    Node* tail;
}List;
void Add(int number, List* list);
void Print(List* list);
void DelAndSearch(int search, List* list);
int main()
{
    int number;
    List list;
    list.head = NULL;
    do {
        scanf_s("%d", &number);
        if (number != -1) {
            Add(number, &list);
        }
    } while (number != -1);    
    Print(&list);
    int search;
    scanf_s("%d", &search);
    //DelAndSearch(search, &list);
    Node* p = list.head;
    Node* q = NULL;
    for (p, q; p; q = p, p = p->next) {
        if (q) {
            if (p->value == search) {
                q->next = p->next;
                free(p);
            }
        }
        else {
            p = p->next;
            free(p);
        }
    }
    Print(&list);
    return 0;
}
void Add(int number,List* list)
{
    Node* p = (Node*)malloc(sizeof(Node));
    p->value = number;
    p->next = NULL;
    if (list->head) {
        list->tail->next = p;
        list->tail = p;
    }
    else {
        list->head = p;
        list->tail = p;
    }
}
void Print(List* list)
{
    for (Node* i = list->head; i != NULL; i = i->next) {
        printf("%d ", i->value);
    }
    printf("\n");
}
void DelAndSearch(int search, List* list)
{
    Node* p = list->head;
    Node* q = NULL;
    for ( p,q ; p; q = p, p = p->next) {
        if (q) {
            if (p->value == search) {
                q->next = p->next;
                free(p);
            }
        }else {
            p = p->next;
            free(p);
        }
    }
    Print(list);
}

DelAndSearch 函数里面的 if(p->value==search) 这句会出错,SOS求解

img

  • 写回答

1条回答 默认 最新

  • liutaoxwl 2021-11-25 16:53
    关注

    for ( p,q ; p; q = p, p = p->next),猜测你应该把p=p-next和q=p交换一下位置就好了。这个涉及逗号运算符的执行顺序。

    你试想一下链表中只有一个元素的时候(其实就是运算到链表最后一个元素的情况)。执行这句之前,p是第一个元素,q是NULL。

    第一次执行这句,先是q=p等于第一个元素,然后p=NULL。然后判定q不是NULL进入下一句,访问p的时候会报错。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 12月3日
  • 已采纳回答 11月25日
  • 创建了问题 11月25日

悬赏问题

  • ¥500 高有偿提问!求优化设计微信小程序
  • ¥15 matlab在安装时报错 无法找到入口 无法定位程序输入点
  • ¥15 收益高的广告联盟有哪些
  • ¥15 Android Studio webview 的使用问题, 播放器横屏全屏
  • ¥15 删掉jdk后重新下载,Java web所需要的eclipse无法使用
  • ¥15 uniapp正式环境中通过webapi将本地数据推送到设备出现的跨域问题
  • ¥15 xui建立节点,显示错误
  • ¥15 关于#单片机#的问题:开始、复位、十进制的功能可以实现,但是切换八进制的功能无法实现(按下按键也没有效果),把初始状态调成八进制,也是八进制可以实现但是切换到十进制不行(相关搜索:汇编语言|计数器)
  • ¥15 VINS-Mono或Fusion中feature_manager中estimated_depth是特征的深度还是逆深度?
  • ¥15 谷歌浏览器如何备份抖音网页数据