#include"stdio.h"
#include"malloc.h"
typedef struct Node
{
int data;
struct Node* next;
}Node;
Node* create(int n)
{
int x, i;
Node* h , * s , * head = NULL;
h = (Node*)malloc(sizeof(Node));
h->next = NULL;
head = h;
printf("请输入第1个数据:");
scanf_s("%d", &x);
h->data = x;
for (i = 2; i <= n; i++)
{
printf("请输入第%d个数据:", i);
scanf_s("%d", &x);
s = (Node*)malloc(sizeof(Node));
s->data = x;
h->next = s;
h = s;
}
return head;
}
void display(Node* L)
{
Node* k;
k = L;
while (k)
{
printf("%d ", k->data);
k = k->next;
}
printf("\n");
}
void dele(Node* L)
{
Node* p, * q, * r, * s = NULL;
q = L;
p = L->next;
r = L;
while (p != NULL)
{
if (p->data > q->data)
{
q = p;
s = r;
}
r = p;
p = p->next;
}
if (q == L)L = L->next;
else s->next = q->next;
free(q);
}
int main()
{
Node* List = (Node*)malloc(sizeof(Node));
int num;
printf("请输入数据的个数:");
scanf_s("%d", &num);
List = create(num);
printf("原数据:\n");
display(List);
dele(List);
printf("删除最大值后:\n");
display(List);
}
建议将为节点的地址设为NULL,否则会出现访存错误,若出现访存错误,将create函数返回之前加入h->next=null
第一个节点是最大的话,也会出现问题。