链表注意对头部的讨论
#include <stdio.h>
#include <malloc.h>
struct stud_node{
int num;
char name[10];
int socre;
struct stud_node *next;
};
struct stud_node *Creat_Stu_Doc()
{
struct stud_node *head = NULL, *p1 = NULL, *p2 = NULL;
while (1) {
p1 = (struct stud_node *)malloc(sizeof(struct stud_node));
scanf("%d", &p1->num);
p1->next = NULL;
if (p1->num == 0) return head;
else {
scanf("%s %d", p1->name, &p1->socre);
//判断链表是否为空链表
if (head == NULL) head = p2 = p1;
else {
p2->next = p1;
p2 = p1;
}
}
}
}
struct stud_node *DeleteDoc(struct stud_node *head, int min_score)
{
struct stud_node *p1 = NULL, *p2 = NULL;
p1 = p2 = head;
while (p1 != NULL) {
if (p1->socre < min_score) {
//头部的删除需要另作讨论
if (p1 == head) {
p2 = p1 = p1->next;
head = head->next;
}
else {
p2->next = p1->next;
p1 = p1->next;
}
}
else {
if (p1 == head) p1 = p1->next;
else {
p1 = p1->next;
p2 = p2->next;
}
}
}
return head;
}
void Ptrint_Stu_Doc(struct stud_node *head)
{
while (head != NULL) {
printf("%d %s %d", head->num, head->name, head->socre);
if (head->next != NULL) printf("\n");
head = head->next;
}
}
int main()
{
struct stud_node *head = Creat_Stu_Doc();
int k;
scanf("%d", &k);
head = DeleteDoc(head, k);
Ptrint_Stu_Doc(head);
return 0;
}