#include <stdio.h>
typedef struct student
{
int num;
int score;
struct student *next;
}STU_NODE,*Linklist;
Linklist creat_link(int n);
void paixu(Linklist head,int n);
void output(Linklist head);
void list_delete(Linklist head,int n);
void main()
{
Linklist head;
int n,m;
printf("请输入结点个数:");
scanf("%d",&n);
head = creat_link(n);
paixu(head,0);
printf("请输入删除的结点:");
scanf("%d",&m);
if(m == 1)
{
head = head->next;
}
else
{
list_delete(head,m);
}
output(head);
}
//创建链表
Linklist creat_link(int n)
{
Linklist head,p,q;
head = (Linklist)malloc(sizeof(STU_NODE));
scanf("%d%d",&head->num,&head->score);
head->next = NULL;
p = head;
while(n != 1)
{
q = (Linklist)malloc(sizeof(STU_NODE));
scanf("%d%d",&q->num,&q->score);
q->next = NULL;
p->next = q;
p = p->next;
n--;
}
return head;
}
//链表从小到大排序,时间复杂度n2
void paixu(Linklist head,int n)
{
if(head == NULL || n == 1) return;
Linklist p,q;
int num,score;
int flag = 1;
p = head;
q = p ->next;
while(q)
{
if(p->num <= q->num)
{
p = q;
q = p->next;
}
else
{
num = p->num;
p->num = q->num;
q->num = num;
score = p->score;
p->score = q->score;
q->score = score;
flag = 0;
p = q;
q = p->next;
}
}
paixu(head,flag);
}
//删除指定结点
void list_delete(Linklist head,int n)
{
Linklist p = head,q;
if(p==NULL) return;
q = p->next;
while(q && n>2)
{
p = q;
q = p->next;
n--;
}
if(q != NULL)
{
p->next = q->next;
free(q);
}
else
{
printf("超出链表长度");
}
}
//输出链表
void output(Linklist head)
{
Linklist p = head;
while(p)
{
printf("%d %d\n",p->num,p->score);
p = p->next;
}
}