#include#include struct node{ int value; struct node *next; }; int main(){ struct node *createList(int codeNum); struct node * reverse(struct node *pHead); void display(struct node *pHead); int num; scanf("%d",&num); struct node *pHead = createList(num); printf("n"); display(pHead); pHead = reverse(pHead); printf("n"); display(pHead); return 0; } struct node *createList(int codeNum){ struct node* createNode(); struct node *pHead = NULL; int i; for(i = 1; i<=codeNum; i++){ struct node *newNode = createNode(); newNode->next = pHead; pHead = newNode; } return pHead; } struct node* createNode(){ // 动态申请内存,创建新结点 struct node *newNode = (struct node*)malloc(sizeof(struct node)); if(newNode != NULL){ // 为新结点的各字段赋值 scanf("%d", &newNode->value); newNode->next = NULL; // 好习惯,不要让指针处于未赋值状态 } return newNode; } void display(struct node *pHead){ // 请编程实现本函数 struct node *p = NULL; if(pHead) p=pHead; while(p) { printf("%d ",p->value); p=p->next; } } struct node * reverse(struct node *pHead){ // 请编程实现本函数 if(pHead == NULL || pHead->next == NULL) //链表为空或者只有头结点 return pHead; struct node *beg = NULL; //指向当前结点的上一个结点 struct node *mid = pHead; //指向当前结点 struct node *end = pHead->next; //指向当前结点的下一个结点 while(1){ mid->next = beg; //改变指向 if(end == NULL) //判断链表是否为空 break; beg = mid; //后移结点 mid = end; end = end->next; } return mid; }



