c - 通过双指针反转链表
问题描述
我试图通过双指针反转链接,而 gcc 不断给我退出状态-1:
#include <stdio.h>
#include <stdlib.h>
typedef struct Node
{
struct Node * link;
} Node;
Node ** reverse(Node ** rootp)
{
if ( ( rootp == NULL )|| ( (*rootp) == NULL) || (((*rootp)->link) == NULL) )
{
return rootp;
}
Node ** old_previous = (Node **)malloc(sizeof(Node));
Node ** previous = (Node **)malloc(sizeof(Node));
previous = rootp;
Node ** current = (Node **)malloc(sizeof(Node));
current = &((*rootp)->link);
((*previous)->link) = NULL;
while ( ((*current)->link) != NULL )
{
old_previous = previous;
previous = current;
current = &((*current)->link);
((*previous)->link) = (*old_previous);
}
((*current)->link) = (*previous);
free(old_previous);
free(previous);
free(current);
return current;
}
void print_list(Node * root)
{
if ( root == NULL )
{ return; }
if (root->link == NULL)
{ printf("%p\n\n",root); return; }
printf("%p ",root);
print_list(root->link);
}
int main(void)
{
Node * first = (Node *)malloc(sizeof(Node));
Node * second = (Node *)malloc(sizeof(Node));
Node * third = (Node *)malloc(sizeof(Node));
first->link = second;
second->link = NULL;
third->link = NULL;
print_list(first);
Node ** rev = reverse(&first);
print_list(*rev);
free(first);
free(second);
free(third);
return 0;
}
由于 gcc 只报告退出状态 -1,我想我必须在反向函数中的某处取消引用 NULL 节点。当我的一个朋友将 reverse 函数的想法翻译成 python 程序时,它工作得很好。反向函数的某处一定有指针问题。你们中有人对我做错了什么有任何想法吗?
谢谢大家考虑。
解决方案
推荐阅读
- php - 如果用户将相同的食物选项添加到购物车中,则增加食物数量 Laravel
- javascript - 在 Chrome 扩展中删除后添加 Javascript 侦听器
- android - 将媒体文件上传到谷歌云的最佳实践
- python - Keras,张量流在 sublime 文本和 spyder 中导入错误,但在命令行中工作
- r - 如何解释来自 robustbase 包的 lmrob 警告
- javascript - 重新加载kendo mvc网格后如何聚焦到下一个网格单元
- javascript - 如何使用带有 Jquery Vector Map 的 Javascript 设置会话
- javascript - 从表单将文件添加到 vue.js 中的 Firebase 存储
- c# - 如何在 Xamarin Forms Android 中隐藏时禁用单击 TabbedPage 菜单项?
- perl - 一个用于在以特定扩展名结尾的文件上递归地将小写转换为大写的衬垫