部分代码,运行时报错,显示Program received signal SIGSEGV, Segmentation fault
//结构体
typedef struct LNode{
int data;
struct LNode *next;
}LNode,*LinkList;
//取值
int GetElem(LinkList L,int i,int *e1){
int j = 1;
LinkList p = (LNode*)malloc(sizeof(LNode));
p = L->next;
while(p && jnext;
j++;
}
if(!p||j>i){
printf("未找到");
return 0;
}
e1 = p->data;
printf("已找到");
return 1;
}
//前插法
void CreateList_H(LinkList L,int n){
L = (LinkList)malloc(sizeof(LNode));
L->next = NULL;
int i = 0;
while(imalloc(sizeof(LNode));
printf("请输入要插入的数据");
scanf("%d",&e->data);
e->next = L->next;
L->next = e;
i++;
}
}
11,27行代码缺失
9行给p分配内存没必要。
不太清楚你的函数具体用途。但是问题实在比较多!
结点才需要分配内存空间的,指针本身用来指向分配出来的空间以及操纵链表用的。
大修改了,仅供参考!谢谢!
#include<stdlib.h>
#include<stdio.h>
// 结构体
typedef struct LNode
{
int data;
struct LNode *next;
} LNode, *LinkList;
// 创建头结点
LNode *head = NULL;
// 取值 取第i个结点的值传回给e所指的变量
int GetElem(LinkList L, int i, int *e);
void CreateList_H(LinkList L, int n);
// 初始化链表
void init_link(LNode ** head)
{
*head = malloc(sizeof(LNode));
if (!*head)
return;
(*head)->next = NULL;
}
int main()
{
int n, m;
int val=0;
// 初始化链表
init_link(&head);
printf("输入插入结点个数:");
scanf("%d", &n);
// 创建链表
CreateList_H(head, n);
printf("输入要查找的第几个结点?");
scanf("%d", &m);
// 查找第5个结点值传回给val
GetElem(head, m, &val);
printf("取回的值是:%d\n", val);
return 0;
}
// 取值 取第i个结点的值传回给e所指的变量
int GetElem(LinkList L, int i, int *e)
{
LinkList p = L->next;
int n = 0;
int j = 0;
while (p)
{
n++;
p = p->next;
}
p = L->next;
while (p)
{
j++;
if (j == 1 + n - i)
{
*e = p->data;
printf("已找到\n");
return 0;
}
p = p->next;
}
printf("未找到!\n");
return -1;
}
// 前插法
// 插入到结点L的前面,前提参数中L代表该结点已经在链表的最前面了
// 插入结点个数n个
void CreateList_H(LinkList L, int n)
{
/*
L = (LinkList) malloc(sizeof(LNode)); L->next = NULL; */
// int i = 0;
// 这个循环想把内存耗尽么?
/*
while (malloc(sizeof(LNode)) ) { ; } */
while (n--)
{
LNode *e = malloc(sizeof(LNode));
if (!e)
return;
printf("请输入要插入的数据:");
scanf("%d", &e->data);
e->next = L->next;
L->next = e;
}
// i++;
}
你先整理下代码,看着很乱,很多缺失的
修改处见注释,供参考:
#include <stdio.h>
#include <stdlib.h>
//结构体
typedef struct LNode{
int data;
struct LNode *next;
}LNode,*LinkList;
//取值
int GetElem(LinkList L,int i,int *e1){
int j = 1;
LinkList p; //= (LNode*)malloc(sizeof(LNode));修改
p = L->next;
while(p && j < i){
p = p->next;
j++;
}
if(!p||j>i){
printf("未找到\n");
*e1 = -1; //修改
return 0;
}
*e1 = p->data; //修改
printf("已找到\n");
return 1;
}
//前插法
void CreateList_H(LinkList* L,int n){ //修改
(*L) = (LinkList)malloc(sizeof(LNode)); //修改
(*L)->next = NULL; //修改
int i = 0;
while(i < n){
LNode* e = (LNode *)malloc(sizeof(LNode));
printf("请输入要插入的数据");
scanf("%d",&e->data);
e->next = (*L)->next; //修改
(*L)->next = e; //修改
i++;
}
}