看看链表哪里不对,为啥free时出错

来源:百度知道 编辑:UC知道 时间:2024/05/21 06:49:11
#include<stdio.h>
#include<malloc.h>
typedef struct Lnode
{
int data;
struct Lnode *next;
}*linklist;

void creatlist(linklist &L, int n) { // 算法2.11
// 逆位序输入(随机产生)n个元素的值,建立带表头结点的单链线性表L
linklist p;
int i;
L=(linklist)malloc(sizeof(struct Lnode));
L->next=NULL; // 先建立一个带头结点的单链表
L->data=0;
for (i=n; i>0; --i)
{
p=(linklist)malloc(sizeof(Lnode)); // 生成新结点
p->data=1; // 改为一个随机生成的数字(200以内)
p->next=L->next;
L->next = p; // 插入到表头
}
}

int getelem(linklist L,int i, int &e) { // 算法2.8
// L为带头结点的单链表的头指针。
// 当第i个元素存在时,其值赋给e并返回OK,否则返回ERROR
linklist p;
p =L->next;
int j = 1; // 初始化,p指向第一个结点,j为计数器
while (p && j<i) { // 顺指针向后查找,直到p指向第i个元素或p为空
p = p->next; ++j;
}
if ( !p || j>i ) return 0; // 第i个元素不存在

太简单的问题了, 就是void show(linklist L,int t) 函数里int l[5]; 5太小了, 在main里面用show(L2,8); 时候溢出了.

楼主的程序,还是写的不错的。
下面修改了两处,主要是show函数里面的数组,有问题。

#include<stdio.h>
#include<malloc.h>

typedef struct Lnode
{
int data;
struct Lnode *next;
}*linklist;

void creatlist(linklist &L, int n)
{ // 算法2.11
// 逆位序输入(随机产生)n个元素的值,建立带表头结点的单链线性表L
linklist p;
int i;

L=(linklist)malloc(sizeof(struct Lnode));
L->next=NULL; // 先建立一个带头结点的单链表
L->data=0;
for (i=n; i>0; --i)
{
p=(linklist)malloc(sizeof(Lnode)); // 生成新结点
p->data=1; // 改为一个随机生成的数字(200以内)
p->next=L->next;
L->next = p; // 插入到表头
}
}

int getelem(linklist L,int i, int &e)
{ // 算法2.8
// L为带头结点的单链表的头指针。
// 当第i个元素存在时,其值赋给e并返回OK,否则返回ERROR
linklist p;
p =L->next;
int j = 1; // 初始化,p指向第一个结点,j为计数器
while (p && j<i