我正在编写一个程序,该程序将字符串转换为链表,并在C中更改它们。
出于某种原因,在我调用我的反向函数后,然后打印列表,它会在打印反向列表之前打印一个新行。
例如,假设我的"列表"包含...a->p->p->l->e->NULL
在main()中,如果我调用... print(list); print(list);
我的输出:
apple
apple
但是,在main()中,如果我调用... print(list); list=reverse(list); print(list);
我的输出:
apple
/*empty line*/
elppa
这是我的修订版()
node *rev(node *head){
node *r_head = NULL;
while (head) {
node *next = head->next;
head->next = rev_head;
r_head = head;
head = next;
}
return r_head;
}
看起来你把列表反转得有点太好了; 列表末尾的NULL
正在成为新的头部,这正在创造您关心的空白空间。
要修复它,我建议检查 while 循环中是否NULL
head->next
:
node *rev(node *head){
node *r_head = NULL;
while (head->next) {
node *next = head->next;
head->next = rev_head;
r_head = head;
head = next;
}
r_head = head;
return r_head;
}
这段代码还没有经过测试,但我相信它应该可以工作。
如果字符串中紧挨着 NULL 字符之前有一个回车符,它将取代第一个字符,因此第二个字符串以额外的回车符开头。
作为建议,将回车放在字符串之外。
虽然你的问题遗漏了所有细节,但我的 ESP 告诉我,你对输入函数使用了某种gets
变体,它也捕获了换行符:
gets() ==> "A P P L E [newline]"
然后当你反转它时,你最终得到
"[newline] E L P P A"
当您连续打印原始字符串和新字符串时,您会得到:
"A P P L E [NL] [NL] E L P P A"
而且,如果您像所有开发人员一样附加了调试器并单步执行代码,那么您已经有了答案!