数据结构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");
            
}

 

posted @ 2018-08-21 17:13  zjkl_欧了  阅读(1556)  评论(0编辑  收藏  举报