C++菜鸟的问题,谢谢各位。。。

来源:百度知道 编辑:UC知道 时间:2024/06/30 03:17:33
node* Head_Create()
{ node *head,*n;
int a;
head=NULL;//a.这句有什么作用?
cout<<"首结点插入法产生链表,输入数据(-1结束):";
for(cin>>a;a!=-1;cin>>a)
{ n=new node;
n->data=a;
if(!head)head=n,n->next=head,head=n;/*b.a句对这边的判断语句有影响吗?*/
else n->next=head,head=n;
}
return head;
}

感觉单向链表好难啊

1,head=NULL;//a.这句有什么作用?

答: 首先 这句是对head初始化, 因为不初始化的话,head里面是个随机数,指向内容是不确定的~ 为了防止你 *head 去访问到不该访问的内存!破坏了其他的数据! 所以指向NULL 表示head暂定为空指针!

2,if(!head)head=n,n->next=head,head=n;/*b.a句对这边的判断语句有影响吗?*/

答: 对这句完全没影响!因为head现在=NULL(即为0), 所以!head(为1)为真, 会进入if语句,然后给head 赋值为n, 然后在进行一系列操作,不过感觉你后面赋值有点乱。 就这样吧。

当然有影响,如果head为空,则意味着这是第一个元素(头元素)所以要用这个元素对head赋值以确定链表的表头。当表头确定后,head将不再为空,此时head=n将不再执行。

你的这个函数相当危险啊,反回一个栈上的指针,随时程序有可能会出错
函数结束时,head指向的这块内存随时可能被系统占用

这个函数是在链表的头部添加数据,每添加一个数据就更新head指针
使 head指针指向新增加一那个数据

首先head=NULL;是初始化,也就是说当第一个输入是-1的时候就是一个空链表
然后在for循环里判断,当添加一是第一个数据时,也就是head==NULL的时候
就将head指针指向第一个数据,同时也将第一个数据的next设为NULL
即第一个数据实际上就是表尾,你应该知道链表尾的next是NULL

接着当head不为NULL的时候,也就是说链表现在已经不为空了
就将new到的n的next指向head, 接着更新head

你这道题,是数据结构中的链表问题吧。
只要理解了链表中的首部的作用就自然理解了。