发布网友 发布时间:2022-04-23 01:54
共2个回答
热心网友 时间:2023-09-19 17:12
我想上面的代码应该是在建立链表时需要的。比如有下面的数据结构:
struct Node链表中一般都有头结点,就是head,其中可以存放数据,也可以不存放数据。在动态建立链表的过程中,肯定需要定义一个新的结点,比如pNext。
pNext=(struct Node *)malloc(sizeof(struct Node));这时候应该将头结点head的next域指向该新的结点。但是head一般不移动,因为移动后就找不到头结点了。所以定义一个指针p,p在开始时指向头结点,就是
建立完新的结点后,p的next域指向该新结点。由于下一次还要建立新节点,所以p要再指向现在已经建立好的新结点。这样下一次建立新的结点时才能正确指向该节点。不知道表达的好不好,把源程序复制在下面吧,应该看一下程序就懂了。
程序没有错误的,可以运行,可以看一下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,来插入数据吗?追答对啊,
p->next=s
p=s
p->next=a
p=a
p->next=b
p=b
p->next=c
p=c