问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

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

发布网友 发布时间:2022-04-23 01:54

我来回答

2个回答

热心网友 时间:2023-09-19 17:12

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

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()函数,是建立链表,包含你想知道的问题,建立链表是一个循环结构。把运行结果也复制一下

追问谢谢,理解了!下次给您分!

追答不用谢~

热心网友 时间:2023-09-19 17:12

首先,你要理解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

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
女生多大后可以不在长身高? 如何不用软件把手机投屏到电脑上手机屏幕怎样投放到电脑上 战时拒绝、故意延误军事订货罪既遂的处罚? 战时故意延误军事订货罪处罚标准 名师1+1导读方案:汤姆·索亚历险记目录 三星sm-g7200打开微信慢,无法正常收看,网速不慢。 笔记本电脑如何调亮屏幕亮度 大伙说说洗衣机要不要带烘干好 热烘干洗衣机怎么样 ef英语哪个好 关于链表中头指针和头指针.next的问题 宇宙中有没有外星人? 链表中p-&gt;next=null代表链表的结尾,请问p-&gt;next是什么意思? 宇宙里到底有没有外星人? 链表里head不是只存一个地址吗?那head-&gt;next是什么? 宇宙之中到底有没有外星人 宇宙中到底有没有外星人的存在? c语言链表: 链表里p-&gt;next是怎么指向下一个结点的呢,它是怎么得到下一个结点的地址。。。求详细 在浩瀚的宇宙中,有没有外星人存在,为什么? C语言链表中q-&gt;next=p;表示什么意思? 宇宙中有没有外星人的存在 宇宙里到底有没有外星人 c语言的数据结构中,next是如何指向下一个元素的? 宇宙中到底有没有外星人啊 宇宙中真有外星人吗?? 链表中a.next=b.next是什么意思 宇宙中有外星生命吗? 宇宙中有没有外星人的存在呢?外星人曾经来过地球吗? 你觉得宇宙里有没有外星人?越详细越好。 宇宙之中到底有没有外星人? c语言p=L;是什么意思,还有p=L-&gt;next;是什么意思,这两个语句有什么区别,L为链表的头结点 链表里p-&gt;next 是怎样指向下一个节点的? c++链表中,fence=fence-&gt;next,指针fence-&gt;next是什么意思 捐碎片可以给阴阳寮加经验吗? 阴阳师阴阳寮退出后多久才能从新加入详解 潮阳区革命烈士马友元,1879年出生,1929年在和平风吹寮被杀害 阴阳寮有时会发福利给成员那个是怎么回事 《阴阳师》手游阴阳寮心愿 阴阳寮怎么招人 民用天然气泄露遇火会爆炸吗? 为什么天然气遇明火会爆炸? 天然气会爆炸吗? 家用天然气会爆炸吗? 天然气的浓度达到50%遇到明火会不会发生爆炸 天然气管道遇明火会引起爆炸么 天然气管道下烧火会不会爆炸? 天然气泄露什么情况会爆炸? 一直担心家里的天然气会爆炸怎么办? 天然气软管遇到火会爆炸吗,打个比方吧,用打火机点天然气软管会有危险吗? 天然气没有火源会发生爆炸燃烧吗 天然气是否会引起爆炸?