链表 - 在 C 中打印不需要的空行



我正在编写一个程序,该程序将字符串转换为链表,并在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"

而且,如果您像所有开发人员一样附加了调试器并单步执行代码,那么您已经有了答案!

相关内容

  • 没有找到相关文章

最新更新