c++ 链表中P=head, P->next=s , s=p的含义?

最近自学链表,看到网上一篇文章,看到下列代码:确实不理解,感觉链表是最难学的!1.P=head2.P->next=s3.p=s这里的含义是不是用s节点替换头节点?如果是s... 最近自学链表,看到网上一篇文章,看到下列代码:确实不理解,感觉链表是最难学的!
1.P=head
2. P->next=s
3.p=s
这里的含义是不是用s节点替换头节点?
如果是s=P呢?具体2者是操作什么含义?什么情况下这样写?
展开
 我来答
enjoy冰心玉壶
2015-10-04 · TA获得超过798个赞
知道小有建树答主
回答量:224
采纳率:100%
帮助的人:97.7万
展开全部

我想上面的代码应该是在建立链表时需要的。比如有下面的数据结构:

struct Node
{
int a;
struct Node *next;
};

链表中一般都有头结点,就是head,其中可以存放数据,也可以不存放数据。在动态建立链表的过程中,肯定需要定义一个新的结点,比如pNext。

pNext=(struct Node *)malloc(sizeof(struct Node));

这时候应该将头结点head的next域指向该新的结点。但是head一般不移动,因为移动后就找不到头结点了。所以定义一个指针p,p在开始时指向头结点,就是

p=pHead;

建立完新的结点后,p的next域指向该新结点。由于下一次还要建立新节点,所以p要再指向现在已经建立好的新结点。这样下一次建立新的结点时才能正确指向该节点。不知道表达的好不好,把源程序复制在下面吧,应该看一下程序就懂了。

#include<stdio.h>
#include<stdlib.h>

struct Node
{
int a;
struct Node *next;
};

struct Node *create_list();
void display_list(struct Node *p);

int main()
{
struct Node *pHead;

pHead=create_list();
display_list(pHead);
return 0;
}

struct Node *create_list()
{
struct Node *pHead=(struct Node *)malloc(sizeof(struct Node));
struct Node *pNext;
struct Node *p;

int i;
int len;
int value;

p=pHead;
p->next=NULL;

printf("请输入链表的节点个数:\n");
scanf("%d",&len);

for(i=0;i<len;i++)
{
pNext=(struct Node *)malloc(sizeof(struct Node));

printf("请输入第%d个节点的数据:\n",i+1);
scanf("%d",&value);
pNext->a=value;
pNext->next=NULL;

p->next=pNext;
p=pNext;
}
return pHead;
}

void display_list(struct Node *p)
{
int i=1;
p=p->next;
for(p;p!=NULL;p=p->next)
{
printf("第%d个节点的数据为:%d\n",i,p->a);
i++;
}
}

程序没有错误的,可以运行,可以看一下create_list()函数,是建立链表,包含你想知道的问题,建立链表是一个循环结构。把运行结果也复制一下

追问
谢谢,理解了!下次给您分!
追答
不用谢~
大雅新科技有限公司
2024-11-19 广告
这方面更多更全面的信息其实可以找下大雅新。深圳市大雅新科技有限公司从事KVM延长器,DVI延长器,USB延长器,键盘鼠标延长器,双绞线视频传输器,VGA视频双绞线传输器,VGA延长器,VGA视频延长器,DVI KVM 切换器等,优质供应商,... 点击进入详情页
本回答由大雅新科技有限公司提供
yanglei5658
2015-10-04 · TA获得超过4756个赞
知道大有可为答主
回答量:835
采纳率:100%
帮助的人:513万
展开全部

首先,你要理解p指针的含义。

根据你的描述,p指针应该是链表内遍历各节点的指针,那么这个指针是不停移动的。

而head指针永远指向链表的头结点。

开始,要让自己声明的指针p指向链表的头结点。所以有

p=head;

进行完这个操作后,p指针和head指针同时指向了链表的头结点。


下面,我们要向链表中插入一个节点,那么这个新插入的节点是什么呢,就是指针s指向的节点。因为链表中每个节点的next指针指向了下一个节点的地址,因此有 

p->next=s;

这句话的意思是,让s指针指向的节点连接在p指针指向节点的后面。


最后,我们又要插入新的节点,那么,必定是要插入在刚才s节点之后的位置,因此,需要移动p指针到刚才s指针指向的节点的位置,所以有

p=s;

记住,链表中,永远只有一个指针移动,这个指针就是p指针。

追问
通过指针P,来插入数据吗?
head s a b c
最后就是这样来添加数据的吗?
追答
对啊,
p->next=s
p=s

p->next=a
p=a

p->next=b
p=b

p->next=c
p=c
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式