#include<stdio.h>

#include<stdlib.h>

#define N 9

typedef struct node{

int data;

struct node * next;

}ElemSN;

ElemSN * Createlink(int a[]){ //逆向创建单向链表

int i;

ElemSN * h=NULL, * p;

for( i=N-1;i>=0;i--){

p=(ElemSN *)malloc(sizeof(ElemSN));

p->data =a[i];

p->next=h;

h=p;

}

return h;

}

void Printlink(ElemSN * h){

ElemSN * p;

for(p=h;p;p=p->next){}

printf("%d\n",p->data);

}

ElemSN * DelMaxNode(ElemSN*h){

ElemSN * Pmax,* p,* Qmax,* q; //p,q指针联动,Pmax,Qmax也是指针联动 Pmax表及链表中的最大结点,Qmax标记链表中最大节点的上一结点

Pmax=h;

for(q=h,p=h->next;p;q=p,p=p->next){//两指针联动

if(Pmax->data<p->data){

Pmax=p;

Qmax=q;

}

}

if(Pmax!=h)

Qmax->next=Pmax->next;

else

h=h->next;

free(Pmax);

return h;

}

int main(void){

int a[]={3,2,5,8,4,7,9,6,1};

ElemSN * head;

head=Createlink(a);

head=DelMaxNode(head);

Printlink(head);

}