//单向循环链表
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#pragma warning(disable: 4996)
//链表的类型定义
typedef struct LNode
{
int data;
struct LNode* next;
}LNode, * LinkList;
//链表的初始化,创建一个有头空链表。
//链表的建立
//头插法
void Creatlist_head(LinkList L, int n)
{
LinkList q; int i;
q = L;
for (i = 0; i < n; i++)
{
LinkList p = (LNode*)malloc(sizeof(LNode));//创建新的节点
printf("please input\n");
scanf("%d", &p->data);//给新节点数据域赋值
p->next = q->next;//插入新节点的指针域 ,p->next 是说明 p 的指向,而L->next 是指下一个指针域
q->next = p;//插入新节点的指针域 , L->next 是说明 L 的指向
}
}
//尾插法
void Creatlist_tail(LinkList L, int n)
{
LinkList q; int i;
q = L;
for (i = 0; i < n; i++)
{
LinkList p = (LNode*)malloc(sizeof(LNode));
printf("intput:\n");
scanf("%d", &p->data);
q->next = p;//插入新节点的指针域 ,L->next 是说明 L 的指向
q = p;//保证插入后的新节点一直是尾节点
}
//q->next = NULL;
}
//打印函数
void printList(LinkList L)
{
LinkList p;//定义一个指针
p = L;//
printf("output:\n");
while (p->next != L)//只要不指向指向本身,就没有遍历完
{
printf("%d ", p->next->data);//打印已经检索到的节点的数据 //p->data?
p = p->next;//顺链操作
}
printf("\n");
}
//删除函数(按值查找)
void deletList(LinkList L, int i)
{
LinkList p;//定义一个临时指针
p = L;
int k = 100;
while (p->next != L)//只要遍历的指针不指向头
{
if (p->next->data == i)//
{
p->next = p->next->next;//
printf("delete success!\n");
return;
}
if (p->next->data != i)
{
p = p->next;
}
}
printf("delete fail\n");
}
int main()
{
LinkList L;
L = (LNode*)malloc(sizeof(LNode));//创建新的节点
L->next = L;//指向本身
printf("start Creattail: \n");
Creatlist_tail(L, 5);
printf("start Creathead: \n");
Creatlist_head(L, 5);
deletList(L, 5);
printList(L);
return 0;
}
我想问一下,我这个程序删除链表节点的时候出现内存错误,是什么地方出了问题吗