为了账号安全,请及时绑定邮箱和手机立即绑定

单链表实现问题

单链表实现问题

拉丁的传说 2019-04-19 16:30:05
在线性表的实现中,头插法和尾插法在函数参数中为什么么用的Node*&head?目前在参考书上的代码实现线性表的操作。去掉&符号,编译依然正确。一枚找工作的大四狗,汪汪。voidInsert_Head(Node*&head,constint&val)//头插法{Node*ptr=newNode();ptr->next=head;ptr->data=val;head=ptr;}voidInsert_Back(Node*&head,Node*&back,constint&val)//尾插法{Node*ptr=newNode();ptr->data=val;ptr->next=NULL;if(head==NULL)head=back=ptr;else{back->next=ptr;back=ptr;}}
查看完整描述

2 回答

?
慕仙森

TA贡献1827条经验 获得超7个赞

你注意一下head和back这两个定义成Node*&类型的参数,在函数内部都有赋值操作。
&表示引用,我想你应该知道的吧,*&就是指针的引用,这个应该也好理解。
引用有一个特点就是,修改型参的值同时也会修改实参的值,但如果不是引用,修改了形参的值对实参不会有影响
就这点区别了
                            
查看完整回答
反对 回复 2019-04-19
?
萧十郎

TA贡献1815条经验 获得超13个赞

指针引用既修改了指针的地址,又修改了指针对应的值.
#include
usingnamespacestd;
voidswapone(int*v1,int*v2)
{
int*temp=v2;
v2=v1;
v1=temp;
cout<<*v1<<""<<*v2<}
voidswaptwo(int*&v1,int*&v2)
{
int*temp=v2;
v2=v1;
v1=temp;
cout<<*v1<<""<<*v2<}
intmain(intargc,char*argv[])
{
inta=20,b=30;
int*p=&a;
int*q=&b;
cout<cout<<"swapone()**************************"<swapone(p,q);
cout<cout<<*p<<""<<*q<cout<<"***********************************"<cout<<"swaptwo()**************************"<swaptwo(p,q);
cout<<*p<<""<<*q<cout<cout<<"***********************************"<
return0;
}
运行结果:
0x7fff5fbff74c0x7fff5fbff748
swapone()**************************
3020
0x7fff5fbff74c0x7fff5fbff748
2030
***********************************
swaptwo()**************************
3020
3020
0x7fff5fbff7480x7fff5fbff74c
***********************************
                            
查看完整回答
反对 回复 2019-04-19
  • 2 回答
  • 0 关注
  • 383 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信