总的来说指针操作可以有3种,一种返回头指针,一种传入头指针,一种传入引用(c++)。
typedef struct LNode
{
int num;
struct LNode *next;
}LNode,*LinkList;
传入头指针(确切是头指针的指针,因为要更改原头指针;如果只传入头指针的话,由于C语言函数形参是一个副本,那样就更改不了头指针了)
void CreateList_L(LinkList *L,int n){//LinkList *相当于LNode **
LinkList p,q;
int i;
*L=(LinkList)malloc(sizeof(LNode));
(*L)->next=NULL;
cout<<"请输入"<<n<<"个链式表元素:"<<endl;
for(i=0;i<n;i++)
{
p=(LinkList)malloc(sizeof(LNode));
cin>>p->data;
if(i==0)
{
p->next=(*L)->next;
(*L)->next=p;
q=p;
}
else
{
p->next=q->next;
q->next=p;
q=p;
}
}
}
返回头指针(C语言最常用的方法)
LinkList Create() //链表创建
{
int n=0;
LNode *p1,*p2,*head;
p1=p2=(LinkList)malloc(sizeof(LNode));
cin>>p1->num;
head=NULL;
while (p1->num!=0)
{
if (n==1)
{
head=p1;
}
else
p2->next=p1;
p2=p1;
p1=(LinkList)malloc(sizeof(LNode));
cin>>p1->num;
n++;
}
p2->next=NULL;
return head;
}
传入引用(C++独有)
void CreateList_L(LinkList &L,int n)//创建链表
{
LinkList p,q;
int i;
L=(LinkList)malloc(sizeof(LNode));
L->next=NULL;
cout<<"请输入"<<n<<"个链式表元素:"<<endl;
for(i=0;i<n;i++)
{
p=(LinkList)malloc(sizeof(LNode));
cin>>p->data;
if(i==0)
{
p->next=L->next;
L->next=p;
q=p;
}
else
{
p->next=q->next;
q->next=p;
q=p;
}
}
}
我把剩余的引用型所有操作列出来
void ListInsert_L(LinkList &L,int i,ElemType e)//插入元素
{
LinkList p,s;
int j;
p=L;j=0;
while(p&&j<i-1)
{
p=p->next;
++j;
}
if(!p||j>i-1) printf("error");
s=(LinkList)malloc(sizeof(LNode));
s->data=e;s->next=p->next;
p->next=s;
}
void ListDelete_L(LinkList &L,int i,ElemType &e)//删除元素
{
LinkList p,q;
int j;
p=L;j=0;
while(p->next&&j<i-1)
{
p=p->next;++j;
}
if(!p->next||j<i-1) if(!p||j>i-1) printf("error");
q=p->next;p->next=q->next;
e=q->data;free(q);
}
void ListLength_L(LinkList L,int &n)//求链表长度
{
LinkList p;
p=L->next;
for(n=0;p!=NULL;p=p->next) n++;
}
void Search_L(LinkList L,int i)//根据位置寻找元素
{
ElemType data;
LinkList p;
p=L->next;
int j;
for(j=0;j<i-1;j++) p=p->next;
data=p->data;
cout<<"查找的元素值为:"<<data<<endl;
}
void ListPrint_L(LinkList L)//打印链表元素
{
LinkList p;
for(p=L->next;p!=NULL;p=p->next) cout<<p->data<<' ';
cout<<endl;
}
拿这三种方式来说,个人感觉如果是C环境下用传入头指针的方式好(比返回值复杂一些),C++传入引用方式好。也就是说不用返回头指针方式。