问题遇到的现象和发生背景
单链表删除min和max之间的元素
问题相关代码,请勿粘贴截图
#include <stdio.h>
#include<stdlib.h>
#include <malloc.h>
typedef int DataType;
typedef struct Lnode
{
DataType data;
struct Lnode* next;
}LinkList;
void Initlist(LinkList*& L)
{
L = (LinkList*)malloc(sizeof(LinkList));
L->next = NULL;
}
void DestroyList(LinkList* L)
{
LinkList* p = L, * q = L->next;
while (q != NULL)
{
free(p);
p = q;
q = p->next;
}
free(p);
}
void Listempty(LinkList* L)
{
if (L->next == NULL)
printf("链表为空");
else
printf("链表不为空");
}
int Listlength(LinkList* L)
{
LinkList* p = L;
int i = 0;
while (p->next != NULL)
{
i++;
p = p->next;
}
return i;
}
void output(LinkList* L)
{
LinkList* p = L->next;
while (p->next != NULL)
{
printf("%c ", p->data);
p = p->next;
}
printf("%c ", p->data);
printf("\n");
}
int Getdata(LinkList* L, int i, DataType x)
{
LinkList* p = L;
int j = 0;
while (p != NULL && j < i - 1)
{
j++;
p = p->next;
}
if (p == NULL)
{
printf("non-existent\n");
return 0;
}
else
{
x = p->data;
return x;
}
}
int Locatedata(LinkList* L, DataType x)
{
LinkList* p = L;
int j = 0;
while (p != NULL && p->data != x)
{
j++;
p = p->next;
}
if (p == NULL)
{
printf("NOt Found!\n");
return 0;
}
else
return(j);
}
int Insertdata(LinkList* L, int i, DataType x)
{
LinkList* p = L, * s;
int j = 0;
while (p != NULL && j < i - 1)
{
j++;
p = p->next;
}
if (p == NULL)
{
printf("Place is wrong");
return 0;
}
else
{
s = (LinkList*)malloc(sizeof(LinkList));
s->data = x;
s->next = p->next;
p->next = s;
return 1;
}
}
void deletes(LinkList* L, int min, int max)
{
LinkList* p, * q, * tmp;
p = L;
q = L->next;
while (q != NULL && q->data <= min)
{
p = q; q = q->next;
}
while (q != NULL && q->data < max)
{
tmp = q;
p->next = q->next;
q = q->next;
free(tmp);
}
}
int main()
{
int a = 0, b = 0;
LinkList* L;
DataType x;
printf("(1)初始化单链表:\n");
Initlist(L);
printf("(2)依次采用尾插法插入元素:\n");
Insertdata(L, 1, '1');
Insertdata(L, 2, '2');
Insertdata(L, 3, '3');
Insertdata(L, 4, '4');
Insertdata(L, 5, '5');
Insertdata(L, 6, '6');
Insertdata(L, 7, '7');
Insertdata(L, 8, '8');
Insertdata(L, 9, '9');
printf("\n");
printf("(3)输出单链表:\n");
output(L);
printf("(4)输入min和max:");
scanf_s("%d,%d", &a, &b);
printf("\n");
deletes(L, a, b);
printf("(5)处理后的单链表:");
output(L);
printf("\n");
}
运行结果及报错内容
运行结果是没有丝毫变化,单链表的初始化是怎样的,最后输出也是怎样的
我的解答思路和尝试过的方法
我想要达到的结果
删除表中值大于min且小于max的结点,同时释放被删除的结点空间,min和max通过参数给定