我正在编写一个程序,将字符串转换为链接列表,并在C中改变它们。
由于某种原因,在我调用反向功能,然后打印列表后,它会在打印反转列表之前打印一个新行。
例如,说出我的列表'包含... a-> p-> p-> l-> e-> NULL 如果我打电话给{(1}} ,请在main()中
我的输出:
print(list); print(list);
但是,如果我打电话给{(1}}
,请在main()中我的输出:
apple
apple
这是我的rev()
print(list); list=reverse(list); print(list);
答案 0 :(得分:1)
看起来你的名单反转得太好了;列表末尾的NULL
正在成为新的头脑,正在创建您关注的空白空间。
要解决此问题,我建议您在while循环中检查head->next
是否为NULL
:
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;
}
此代码尚未经过测试,但我相信它应该有效。
答案 1 :(得分:1)
如果在你的NULL字符之前你的字符串中有一个回车符,它将取代第一个字符,因此开始第二个字符串并带来额外的回报。
作为建议,请将您的回车带回到字符串之外。
答案 2 :(得分:1)
虽然您的问题遗漏了所有细节,但我的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"
而且,如果您已经附加了调试器并逐步完成了代码,就像所有开发人员一样,那么您已经有了答案!