首页 > 单链表实现问题

单链表实现问题

在线性表的实现中,头插法和尾插法在函数参数中为什么么用的Node*&head?
目前在参考书上的代码实现线性表的操作。去掉&符号,编译依然正确。
一枚找工作的大四狗,汪汪。

void Insert_Head( Node *&head , const int &val ) // 头插法
{
    Node *ptr = new Node() ;
    ptr->next = head ;
    ptr->data = val ;
    head = ptr ;
}

void Insert_Back( Node *&head , Node *&back ,const int &val ) // 尾插法
{
    Node *ptr = new Node() ;
    ptr->data = val ;
    ptr->next = NULL ;
    if ( head == NULL )
        head = back = ptr ;
    else {
        back->next = ptr ;
        back = ptr ;
    }
}

指针引用既修改了指针的地址,又修改了指针对应的值.

#include<iostream>
using namespace std;

void swapone(int *v1,int *v2)
{
    int *temp=v2;
    v2=v1;
    v1=temp;
    cout<<*v1<<" "<<*v2<<endl;
}

void swaptwo(int *&v1,int *&v2)
{
    int *temp=v2;
    v2=v1;
    v1=temp;
    cout<<*v1<<" "<<*v2<<endl;
}
int main(int argc, char *argv[])
{
    int a=20,b=30;
    int *p=&a;
    int *q=&b;
    cout<<p<<" "<<q<<endl;
    cout<<"swapone()**************************"<<endl;
    swapone(p,q);
    cout<<p<<" "<<q<<endl;
    cout<<*p<<" "<<*q<<endl;
    cout<<"***********************************"<<endl;
    cout<<"swaptwo()**************************"<<endl;
    swaptwo(p,q);
    cout<<*p<<" "<<*q<<endl;
    cout<<p<<" "<<q<<endl;
    cout<<"***********************************"<<endl;

    return 0;
}

运行结果:

0x7fff5fbff74c 0x7fff5fbff748
swapone()**************************
30 20
0x7fff5fbff74c 0x7fff5fbff748
20 30
***********************************
swaptwo()**************************
30 20
30 20
0x7fff5fbff748 0x7fff5fbff74c
***********************************

你注意一下 head 和 back 这两个定义成 Node*& 类型的参数,在函数内部都有赋值操作。

& 表示引用,我想你应该知道的吧,*& 就是指针的引用,这个应该也好理解。

引用有一个特点就是,修改型参的值同时也会修改实参的值,但如果不是引用,修改了形参的值对实参不会有影响

就这点区别了

【热门文章】
【热门文章】