我需要修理这个考试练习,因为我的老师会问我明天如何在口语考试中解决这个问题:
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是:DOG
如果我在a:DOG中插入3个字符串 - > CAT - >猫 该功能不会删除“DOG”并显示输出:DOG - > CAT - > CAT(正确输出为CAT - > CAT)
案例2:
我发现的另一个错误是:如果列表是:DOG - >狗 - > CAT我得到输出DOG - >狗 - > CAT(右输出应该是:CAT)
所有其他情况应该正常。
struct is:
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
}
请注意,我只需要解决此问题,而不是编写其他代码。
请不要看这些功能中的溢出,错误等等!只需修复第一个功能!其他人则需要进行个人测试。
答案 0 :(得分:0)
@BLUEPIXY在评论中给出了非常强烈的提示,我将对此进行扩展:
案例1:
k是:DOG
如果我在a:DOG中插入3个字符串 - > CAT - > CAT功能不会删除“DOG”并显示输出:DOG - > CAT - > CAT(正确输出为CAT - > CAT)
案例2:
我发现的另一个错误是:如果列表是:DOG - >狗 - > CAT我得到输出DOG - >狗 - > CAT(右输出应该是:CAT)
在这两种情况下,您要删除的字符串都出现在列表的 head 中。在这种情况下,block in start_thread'
2015-06-30T08:21:54.512062+00:00 app[web.1]: 62.252.214.33 - - [30/Jun/2015:08:21:54 +0000] "GET / HTTP/1.1" 500 30 0.0023
2015-06-30T08:48:18.429835+00:00 heroku[api]: Starting process with command
需要返回列表的 new 头部,而不是by guillaume.bouffard@hotmail.co.uk
2015-06-30T08:48:21.683429+00:00 heroku[run.3694]: Awaiting client
2015-06-30T08:48:21.711122+00:00 heroku[run.3694]: Starting process with command
1
<小时/> 1。如果
2015-06-30T08:48:22.102369+00:00 heroku[run.3694]: State changed from starting to up
2015-06-30T08:48:23.553202+00:00 heroku[run.3694]: State changed from up to complete
2015-06-30T08:48:23.542808+00:00 heroku[run.3694]: Process exited with status 127
2015-06-30T08:54:15.444683+00:00 heroku[router]: at=info method=GET path="/" host=guillaume-bookmark-manager.herokuapp.com request_id=044274e4-694c-47e3-8ee5-1ac35ae8a5c9 fwd="62.252.214.33" dyno=web.1 connect=0ms service=44ms status=500 bytes=326
2015-06-30T08:54:15.446539+00:00 app[web.1]: 2015-06-30 08:54:15 - DataObjects::ConnectionError - could not connect to server: Connection refused
2015-06-30T08:54:15.446547+00:00 app[web.1]: Is the server running on host "localhost" (127.0.0.1) and accepting
2015-06-30T08:54:15.446549+00:00 app[web.1]: TCP/IP connections on port 5432?
2015-06-30T08:54:15.446551+00:00 app[web.1]: :
2015-06-30T08:54:15.446553+00:00 app[web.1]: /app/vendor/bundle/ruby/2.0.0/gems/data_objects-0.10.15/lib/data_objects/connection.rb:79:in
应该代表列表的头部,请为变量使用更有意义的名称,例如new'
2015-06-30T08:54:15.446556+00:00 app[web.1]: /app/vendor/bundle/ruby/2.0.0/gems/data_objects-0.10.15/lib/data_objects/pooling.rb:181:in
或synchronize'
2015-06-30T08:54:15.446559+00:00 app[web.1]: /app/vendor/bundle/ruby/2.0.0/gems/data_objects-0.10.15/lib/data_objects/pooling.rb:176:in
(或者您的母语等价物)。