注册 登录
编程论坛 数据结构与算法

链表问题

cwl168 发布于 2012-12-14 14:08, 492 次点击
#include
#include
#include
typedef struct node{
   int data;
   struct node *next;
}Linklist;
void createlist(Linklist * L,int n)
{   
    int i;Linklist * p;
    L=(Linklist *)malloc(sizeof(Linklist));//先建立一个带头结点的单链表
    L->next=NULL;
    for(i=n;i>0;--i)
    {
        p=(Linklist *)malloc(sizeof(Linklist));
        printf("请输入数据!\n");
        scanf("%d",&p->data);
        p->next=L->next;L->next=p; //头插法建立链表


    }
    printf("建立链表成功!\n");

}
void print(Linklist *L)
{
    Linklist *p;
    p=L->next;
    while(p!=NULL)
    {
      p=p->next;
      printf("%d",p->data);
    }
}
int leng(Linklist *L)
{
    int i=0;Linklist *p;
    p=L->next;
    while(p)
    {
        p=p->next;
        ++i;
    }
    return i;
}
int main()
{   
    Linklist L;
    createlist(& L,5);
    printf("链表的长度是%d\n",leng(& L));
//    print(& L);
    return 0;
}
为什么在建立链表成功之后,他的长度打印不出来,而是出现异常
6 回复
#2
crystall2012-12-14 15:10
程序代码:
#include "stdafx.h"

#include<stdio.h>
#include<stdlib.h>
#include<iostream.h>


typedef struct node
{
   int data;
   struct node *next;
}Linklist;

void createlist(Linklist*& L,int n)
{  
    int i;
   
    Linklist * p;
    L=(Linklist *)malloc(sizeof(Linklist));//先建立一个带头结点的单链表
    L->next=NULL;

    for(i=n;i>0;--i)
    {
        p=(Linklist *)malloc(sizeof(Linklist));
        printf("请输入数据!\n");
        scanf("%d",&p->data);
        p->next=L->next;L->next=p; //头插法建立链表
    }

    printf("建立链表成功!\n");

}
void print(Linklist *L)
{
    Linklist *p;
    p=L->next;
    while(p!=NULL)
    {
      p=p->next;
      printf("%d",p->data);
    }
}

int leng(Linklist *L)
{
    //指针访问前,一定要做检查
   
//定义指针变量,马上初始化,防止野指针被访问
   
//如果海量代码出错,排错是很头疼的

    if(L == NULL)
    {
        return 0;
    }

    int i=0;
    Linklist *p = NULL;
    p=L->next;
    while(p)
    {
        p=p->next;
        ++i;
    }
    return i;
}

int main()
{  
    //Linklist L;
   
//createlist(& L,5);
   
//printf("链表的长度是%d\n", leng(&L));

    Linklist* L;

    createlist(L, 5);

    printf("链表的长度是%d\n", leng(L));

    return 0;
}
#3
cwl1682012-12-14 21:46
谢谢你
#4
cwl1682012-12-14 21:58
void createlist(Linklist*& L,int n) 中的Linklist*& L是什么意思,为什么不能直接写Linklist *L,谢谢
#5
cwl1682012-12-14 22:00
是引用还是取地址
#6
cwl1682012-12-14 22:08
除掉就不行
#7
crystall2012-12-15 09:27
回复 5楼 cwl168
引用
1