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日

悬赏问题

  • ¥50 树莓派安卓APK系统签名
  • ¥15 maple软件,用solve求反函数出现rootof,怎么办?
  • ¥65 汇编语言除法溢出问题
  • ¥15 Visual Studio问题
  • ¥20 求一个html代码,有偿
  • ¥100 关于使用MATLAB中copularnd函数的问题
  • ¥20 在虚拟机的pycharm上
  • ¥15 jupyterthemes 设置完毕后没有效果
  • ¥15 matlab图像高斯低通滤波
  • ¥15 针对曲面部件的制孔路径规划,大家有什么思路吗