c - 关于列表和指针 C 的考试练习

标签 c string list pointers struct

我需要修复这个考试练习,因为明天我的老师会在口试时问我如何修复这个问题:

nodo *CancellaTutto(nodo *a, char *k) {

nodo *p,*q;

p = a;

if (p == NULL)
    return NULL;

while (p != NULL) {

    if (strcmp(p->chiave, k) == 0 ) {


        if (p->prec == NULL && p->succ == NULL)
            return NULL;

        if (p->succ == NULL && p->prec != NULL) {
            q = p;

            p = p->prec;
            p->succ = NULL;
            free(q);
        }

        if (p->prec == NULL && p->succ != NULL) {
            q = p;

            p = p->succ;
            p->prec = NULL;
            free(q);
        }

        if (p->prec != NULL && p->succ != NULL) {
            q = p;

            p = p->succ;
            q->prec->succ = p;
            p->prec = q->prec;
            free(q);
        }

    } else { p = p->succ; }

}

return a;
}

这个函数应该检查两个字符串是否相等(一个在结构体链表中,另一个是第 k 个字符串)并删除所有等于 k ​​的字符串,但是有两种输出情况显然是错误的:

案例1:

k 是:狗

如果我在 a 中插入 3 个字符串:DOG -> CAT -> CAT 该函数不会删除“DOG”并显示输出:DOG -> CAT -> CAT(正确的输出是 CAT -> CAT)

案例2:

我发现的另一个错误是:如果列表是:DOG -> DOG -> CAT 我得到输出 DOG -> DOG -> CAT (正确的输出应该是:CAT)

所有其他情况都应该正常工作。

结构是:

struct nodo {
char *chiave;
struct nodo *prec;
struct nodo *succ;
};
typedef struct nodo nodo;

其余代码为:(只读理解这部分仅用于个人测试;对考试无用)

int main()
{
nodo *lista=CreateListString(); // create a list
Visualizza(lista); // views it
char *stringa="ciao"; // create k string
lista=CancellaTutto(lista,stringa); // call function
Visualizza(lista); // views it
}

请注意,我只需要解决这个问题,而不是编写其他代码。

请不要看这些函数中的溢出、错误之类的东西!只需修复第一个功能即可!其他的是个人测试。

最佳答案

@BLUEPIXY 在评论中给出了非常强烈的提示,我将对此进行扩展:

CASE 1:

k is : DOG

if i insert 3 strings in a : DOG -> CAT -> CAT the function doesnt erase "DOG" and show me output: DOG -> CAT -> CAT (correct output is CAT -> CAT)

CASE 2:

Another error i found is: if a list is : DOG -> DOG -> CAT i get output DOG -> DOG -> CAT (right output should be: CAT)

在这两种情况下,您要删除的字符串都出现在列表的头部。在这种情况下,CancellaTutto 需要返回列表的头,该头不会是 a1

<小时/> 1.如果 a 应该代表列表的头部,请为变量使用更有意义的名称,例如 headlistHead (或无论您的母语对应是什么)。

关于c - 关于列表和指针 C 的考试练习,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31118312/

相关文章:

c - 在某些情况下,c 中的负 float 会失败

c - 快速读取大于c中内存的文件

Java - 最有效的快速检索结构

Python 列表分配错误

python 如何创建可互换值列表?

python - 使用 python3 查找数字列表中的第二大数字

R 数据框 : add values in common rows

c - 带有 pipe( ) 函数的简单 shell

c++ - c/c++ 中局部变量的作用域和生命周期的困惑

c# - 将字符串转换为时间