# include<stdio.h> # include<malloc.h> # include<stdlib.h> typedef struct Node{ int data; struct Node *pnext; }Node,*PNODE; PNODE creatList(void); void travelList(PNODE pHead); int main(){ PNODE pHead=NULL; pHead=creatList(); travelList(pHead); return 0; } //創建鏈表,需要內存空間 PNODE creatList(void){ //生成一個頭結點,phead指向頭結點 int len; int i; int val; PNODE pHead=(PNODE)malloc(sizeof(Node)); if(NULL==pHead){ printf("分配內存失敗"); exit(-1); } PNODE ptail=pHead; ptail->pnext=NULL; printf("input the numbers:len="); scanf("%d",&len); for(i=0;i<len;i++) { printf("輸入第%d元素",i+1); scanf("%d",&val); //\n PNODE pnew=(PNODE)malloc(sizeof(Node)); if(NULL==pnew){ printf("分配內存失敗"); exit(-1); } pnew->data=val; ptail->pnext=pnew; pnew->pnext=NULL; ptail=pnew; } return pHead; } void travelList(PNODE pHead){ PNODE p; p=pHead->pnext; while(NULL!=p) { printf("%d",p->data); p=p->pnext; } printf("\n"); return ; }

主要原因--注意在scanf("%d\n"),不用加\n。因為本身我們通過鍵盤敲如都會加回車
函數參數個數變化
/* 遍歷僅需要頭指針 尋找單鏈表中的第i個節點;並在第i個節點后面插入節點s */ # include<stdio.h> # include<malloc.h> # include<stdlib.h> typedef struct Node{ int data; struct Node *pnext; }Node,*LinkList; typedef int Status; void creatList(LinkList L,int n); void travelList(LinkList L); int main(){ LinkList L=(LinkList)malloc(sizeof(Node)); int len; printf("input the length of Link,len="); scanf("%d",&len); creatList(L,len); travelList(L); return 0; } //創建鏈表,需要內存空間 void creatList(LinkList L,int n) {LinkList p,r; int i; int val; r=L; for(i=0;i<n;i++) { printf("輸入的是第%d個元素",i+1); scanf("%d",&val); p=(Node*)malloc(sizeof(Node)); p->data=val; r->pnext=p; r=p; } r->pnext=NULL; } void travelList(LinkList L){ LinkList p=L->pnext; while(NULL!=p) { printf("%d",p->data); p=p->pnext; } printf("\n"); }
方式二、利用LinkList中的*L作為參數,在創建鏈表函數中
/* 遍歷僅需要頭指針 尋找單鏈表中的第i個節點;並在第i個節點后面插入節點s */ # include<stdio.h> # include<malloc.h> # include<stdlib.h> typedef struct Node{ int data; struct Node *pnext; }Node,*LinkList; typedef int Status; void creatList(LinkList *L,int n); void travelList(LinkList L); int main(){ LinkList L=(LinkList)malloc(sizeof(Node)); int len; printf("input the length of Link,len="); scanf("%d",&len); creatList(&L,len); travelList(L); return 0; } //創建鏈表,需要內存空間 void creatList(LinkList *L,int n) {LinkList p,r; int i; int val; *L=(LinkList)malloc(sizeof(Node)); r=*L; for(i=0;i<n;i++) { printf("輸入的是第%d個元素",i+1); scanf("%d",&val); p=(Node*)malloc(sizeof(Node)); p->data=val; r->pnext=p; r=p; } r->pnext=NULL; } void travelList(LinkList L){ LinkList p=L->pnext; while(NULL!=p) { printf("%d",p->data); p=p->pnext; } printf("\n"); }
