c语言链表逆转,程序运行不出结果
检查了好多遍就是找不到错在哪里?程序代码:
#include "stdio.h" #include "stdlib.h" typedef int ElementType; typedef struct Node *PtrToNode; struct Node { ElementType Data; PtrToNode Next; }; typedef PtrToNode List; List Read( ) { int i,a; int N; //链表结点个数 List p,q,head; scanf("%d",&N); head=NULL; p=(struct Node*)malloc(sizeof(struct Node)); for(i=1;i<=N;i++) { scanf("%d",&a); p->Data=a; p->Next=NULL; if(head==NULL) head=p; else q->Next=p; q=p; } return head; } void Print(List head) { struct Node *t; t=head; while(t!=NULL) { printf("%d",t->Data); t=t->Next; } } List Reverse(List head ) { List s,t,p; t=NULL; p=head; while(p!=NULL)//当原链表头指针不指向空时 { s=(struct Node*)malloc(sizeof(struct Node)); /*逆转之后,原链表的头结点就是新链表的尾结点 如果不是第一个结点,则本次产生的新结点是上次结点的前一个*/ s->Data=p->Data; s->Next=t; t=s; p=p->Next; } return s; } int main() { List L1, L2; L1 = Read(); //返回链表头指针 L2 = Reverse(L1); Print(L1); Print(L2); return 0; }