头插法建立单链表的算法中有几个地方不太懂,请教(不懂得地方在代码后标记)

link*link::hcreat(intn){inti;p=NULL;//p是代表什么?for(i=1;i<=n;i++){s=newlink;cin>>s->data... link *link::hcreat(int n)
{
int i;
p=NULL; //p是代表什么?
for(i=1;i<=n;i++)
{
s=new link;
cin>>s->data;
s->next=p;
p=s; //这句话何解?
}
return p; //为什么是输出p,而不是s?
}
展开
 我来答
小鹤思思
2012-04-22 · TA获得超过566个赞
知道答主
回答量:54
采纳率:0%
帮助的人:87.8万
展开全部
头插法建立单链表的意思就是每次从表头插入一个节点!这是思路!你得知道这个!
至于你得注释的问题:(1)p代表的是当前链表的第一个节点!刚开始链表为空!当然p=NULL了!(2)p=s何解。s是新建立的节点!把s赋给p就是让p重新指向s(这里的s是当前的第一个节点),这样p又一次指向了链表的第一个节点!以便进行下次循环!换句话说,每次循环p都要指向链表的第一个节点!而s是新建立的节点!是要在第一个节点前插入链表的!(因为是头插法嘛!)
(3)为什么输出p,其实s也一样!因为最后你不是把s赋给p了吗(这句p=s)所以这时p和s都指向链表的第一个节点!输出他!明白了吧?
paykka
2025-08-05 广告
Paykka 的数字化流程涵盖了开户、收款、提现等全流程,从资料提交、账户开通到各种资金操作,都能在线上完成,无需用户进行线下干预,简化了操作步骤,提升了整体的操作效率。... 点击进入详情页
本回答由paykka提供
firsttimek
2012-04-21 · TA获得超过327个赞
知道小有建树答主
回答量:145
采纳率:0%
帮助的人:85.8万
展开全部
不知道你这段程序哪来的,不过我估计这只是个算法,不是完整的程序,所以断断续续,你就没法看懂。我给你个完整的你去看吧!
线性链表的插入、删除和合并(源程序)

#include<iostream>
#include<malloc.h>
#define OK 1
#define ERROR 0
using namespace std;
//-----------------------
typedef struct lnode{
int date;
struct lnode *next;
}lnode,*linklist;

void creat_l(linklist &L,int n)
{
int i;
lnode *p;
L=(linklist)malloc(sizeof(lnode));
L->next=NULL;
for(i=0;i<n;++i)
{
p=(linklist)malloc(sizeof(lnode));
cin>>p->date;
p->next=L->next;
L->next=p;
}
}
void output( linklist &L)
{
lnode* p;
p=L->next;
while(p)
{
cout<<p->date<<"**";
p=p->next;

}
}
struct insert(linklist &L,int i,int e)
{
lnode *p,*s;
int j=0;
p=L;
while(p&&j<i-1)
{
p=p->next;
++j;
}
if(!p||j>i-1)
return ERROR;
s=(linklist)malloc(sizeof(lnode));
s->date=e;
s->next=p->next;
p->next=s;
return OK;
}
struct delect(linklist &L,int j, int e)
{
lnode *p,*q;
int m=0;
p=L;
while(p->next&&m<j-1)
{
p=p->next;
++m;

}
if(!(p->next)||m>j-1)
return ERROR;
q=p->next;
p->next=q->next;
e=q->date;
free(q);
return OK;

}

void creat_emptyl(linklist &L)
{
L=(linklist)malloc(sizeof(lnode));
L->next=NULL;
}

void Mergelist_L(linklist &La,linklist &Lb,linklist &Lc)
{
lnode *pa,*pb,*pc;
pa=La->next;
pb=Lb->next;
pc=Lc;

while(pa&&pb)
{

if(pa->date<=pb->date)
{
pc->next=pa;
pc=pa;
pa=pa->next;
}
else
{
pc->next=pb;
pc=pb;
pb=pb->next;
}
}
pc->next=pa?pa:pb;
free(Lb);
free(La);

}

void main()
{
linklist La,Lb,Lc;
int i,j,n,e;
cout<<"*******创建新链表*******"<<endl;
cout<<"请输入要创建的链表的长度n:"<<endl;
cin>>n;
cout<<"开始创建:"<<endl;
creat_l(La, n);
output( La);
cout<<endl;

cout<<"*******链表的插入*******"<<endl;
cout<<"请输入要插入的元素的位置i:"<<endl;
cin>>i;
cout<<"请输入要插入的元素e:"<<endl;
cin>>e;
insert(La, i, e);
output( La);
cout<<endl;

cout<<"*******链表的删除*******"<<endl;
cout<<"请输入要删除的元素的位置j:"<<endl;
cin>>j;
delect(La, j, e);
output(La);
cout<<endl;

cout<<"*******创建新链表*******"<<endl;
cout<<"请输入要创建的链表的长度n:"<<endl;
cin>>n;
cout<<"开始创建:"<<endl;
creat_l(Lb, n);
output( Lb);
cout<<endl;

cout<<"创建空链表"<<endl;
creat_emptyl(Lc);
cout<<endl;

cout<<"*******合并链表*******"<<endl;
Mergelist_L(La,Lb,Lc);
output( Lc);
cout<<endl;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式