#include<iostream>
#include<stdlib.h>using namespace std;int n;typedef int ElemType;typedef struct LNode{ ElemType elem; LNode *next; }LNode,*LinkList; int InitList(LinkList &L){ L=(LinkList)malloc(sizeof(LNode)); if(!L) exit(0); L->next=NULL; return 1;} int CreateAscend(LinkList &L,int n){ int i=1; if(n<=0) return 0; InitList(L); printf("请输入%d个元素\n",n); LinkList s,p,q; s=(LinkList)malloc(sizeof(LNode)); scanf("%d",&s->elem); L->next=s; s->next=NULL; while(i<n){ s=(LinkList)malloc(sizeof(LNode)); p=L->next; q=L; scanf("%d",&s->elem); while(p&&(p->elem<=s->elem)){ q=p; p=p->next; } s->next=p; q->next=s;/**************修改**************/ if(!p){ q->next=s;s->next=NULL;}/**************/ //s->next=q->next;//q->next=s;i++;}} void ScanList(LinkList &L){ LinkList p; p=L->next; printf("请输入链表%d个元素数升序输出\n",n); while(p){ printf("%-5d",p->elem); p=p->next; } } int main(){ LinkList L;printf("请输入链表的元素数\n");scanf("%d",&n);CreateAscend(L,n);ScanList(L);system("pause");return 0; }/*int CreateAscend(LinkList &L,int n)InitList(LinkList &L)ScanList(LinkList &L)这三个LinkList &L都要加 &不然为造成指针丢失,例如: LinkList L中的 L为指向 struct LNode{ ElemType elem; LNode *next; }的指针,你在调用 CreateAscend(L,n);时由于把 int main()的中LinkList L给了 CreateAscend(L,n)的 L当不加&时由于是指针给了指针所以相当时调用函数中的l中的形参l指向实参l 是实参的地地(指针在末初始化之前时指向内存中的垃圾单元是不可用用的)暂时说能用接着说: 所以你的这个函数形参指向的也是不可能的 当你为 int InitList(LinkList &L){ L=(LinkList)malloc(sizeof(LNode)); if(!L) exit(0); L->next=NULL; return 1;}时是把 L指向了在堆中分配的 (LinkList)malloc(sizeof(LNode))所以此时不指向实参叫做丢失了,假如你想用有一个方法就是用二级指针 *//*二级指针 :#include<iostream>#include<stdlib.h>using namespace std;int n;typedef int ElemType;typedef struct LNode{ ElemType elem; LNode *next; }LNode,*LinkList; int InitList(LinkList *L){ *L=(LinkList)malloc(sizeof(LNode)); if(!*L) exit(0); (*L)->next=NULL; return 1;} int CreateAscend(LinkList *L,int n){ int i=1; if(n<=0) return 0; InitList(L); printf("请输入%d个元素\n",n); LinkList s,p,q; s=(LinkList)malloc(sizeof(LNode)); scanf("%d",&s->elem); (*L)->next=s; s->next=NULL; while(i<n){ s=(LinkList)malloc(sizeof(LNode)); p=(*L)->next; q=(*L); scanf("%d",&s->elem); while(p&&(p->elem<=s->elem)){ q=p; p=p->next; } s->next=p; q->next=s;/**************修改************** if(!p){ q->next=s;s->next=NULL;}/************* //s->next=q->next;//q->next=s;i++;}} void ScanList(LinkList *L){ LinkList p; p=(*L)->next; printf("请输入链表%d个元素数升序输出\n",n); while(p){ printf("%-5d",p->elem); p=p->next; } } int main(){ LinkList L;printf("请输入链表的元素数\n");scanf("%d",&n);CreateAscend(&L,n);ScanList(&L);system("pause");return 0; }*/