红糖糍粑
12345struct Node{ int a; struct Node *next;};链表中一般都有头结点,就是head,其中可以存放数据,也可以不存放数据。在动态建立链表的过程中,肯定需要定义一个新的结点,比如pNext。1pNext=(struct Node *)malloc(sizeof(struct Node));这时候应该将头结点head的next域指向该新的结点。但是head一般不移动,因为移动后就找不到头结点了。所以定义一个指针p,p在开始时指向头结点,就是1p=pHead;建立完新的结点后,p的next域指向该新结点。由于下一次还要建立新节点,所以p要再指向现在已经建立好的新结点。这样下一次建立新的结点时才能正确指向该节点。不知道表达的好不好,把源程序复制在下面吧,应该看一下程序就懂了。1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162#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()函数,是建立链表,包含你想知道的问题,建立链表是一个循环结构。把运行结果也复制一下