请进,链表初始化为什么要二级指针?

zhui1988 2009-11-11 06:19:50
链表初始化为什么要二级指针?

例如:
单链表初始化:
int InitList(LinkList *h)
{
*h= (LinkList )malloc(sizeof(LNode));
if(!h) //这里问一下,h 前面需不需要加 * ?
{
printf("初始化链表错误!\n");
rerurn 0;
}
(*h)->next = NULL;
rerurn 1;
}


谢谢!
...全文
453 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
pehaps 2009-11-11
  • 打赏
  • 举报
回复
疏忽了,只关注2级指针了!
JasonLiu798 2009-11-11
  • 打赏
  • 举报
回复
int InitList(LinkList &h) //这里用结点指针的引用
{
h= (LinkList)malloc(sizeof(LNode));
if(!h)
{
printf("初始化链表错误!\n");
rerurn 0;
}
h->next = NULL;
rerurn 1;
}
berryluo 2009-11-11
  • 打赏
  • 举报
回复
这样是不行的,你没分清楚指针传递跟值传递的区别吧!
另外,发现LZ的return 写成rerurn 了。。。


[Quote=引用 3 楼 pehaps 的回复:]
没要这样的!直接用指针就好了!
int InitList(LinkList h)
  {
    h= (LinkList )malloc(sizeof(LNode));
    if(!h)  //这里问一下,h 前面需不需要加 *  ?
    {
    printf("初始化链表错误!\n");
    rerurn 0;
    }
    h->next = NULL;
    rerurn 1;
}
[/Quote]
kuruby 2009-11-11
  • 打赏
  • 举报
回复
http://topic.csdn.net/u/20091110/12/ea11fd47-282b-4af7-b06a-27fa31b31dea.html?15931
楼主可以去这儿看看。我昨天也问了同样的问题,有大哥回答了,但是我还是有一些不是很明白的地方。你可以去看看理解一下,大家一起讨论一下。
pehaps 2009-11-11
  • 打赏
  • 举报
回复
没要这样的!直接用指针就好了!
int InitList(LinkList h)
{
h= (LinkList )malloc(sizeof(LNode));
if(!h) //这里问一下,h 前面需不需要加 * ?
{
printf("初始化链表错误!\n");
rerurn 0;
}
h->next = NULL;
rerurn 1;
}
zhui1988 2009-11-11
  • 打赏
  • 举报
回复
上面的结点结构为:
typedef struct Node{
DataType data;
struct Node *next;
}LNode ,*LinkList;
berryluo 2009-11-11
  • 打赏
  • 举报
回复
if(!(*h)) 应该这样写吧。。。。。
如果写成if(!h) 这样会是恒为真的。。。。。
h是参数的地址,如果h等于NULL,那么说明传的参数有问题
如果参数没问题,那么malloc时如果*h等于NULL,那么说明malloc申请内存失败
代码应该这样写:

int InitList(LinkList *h)
{
if(NULL == h) {//如果h是空指针,则说明传过来的参数有问题
printf("h is NULL\n");
return 0;
}
*h= (LinkList )malloc(sizeof(LNode));
if(!h) //这里问一下,h 前面需不需要加 * ?
{
printf("初始化链表错误!\n");
rerurn 0;
}
(*h)->next = NULL;
rerurn 1;
}

33,008

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧