数据结构C---单链表的创建及遍历
# 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"); }