38-7
带头结点的单链表中所有元素结点的值无序,编写一个函数,删除介于min和max之间的结点
删除操作中,快慢指针是最优解
#include <stdio.h> #include <stdlib.h> typedef struct node{ int data; struct node *next; }LNode,*LinkList; void TailCreate(LinkList &L) { L=(LinkList)malloc(sizeof(LNode)); L->next=NULL; LNode *p,*r=L; int x; scanf("%d",&x); while(x!=999) { p=(LNode*)malloc(sizeof(LNode)); p->data=x; p->next=NULL; r->next=p; r=p; scanf("%d",&x); } } void displayList(LinkList L) { LNode *p=L->next; while(p!=NULL) { printf("%d ",p->data); p=p->next; } } void Delete(LinkList &L,int min,int max) { LNode *p=L->next; LNode *r=L; while(p!=NULL) { if(p->data<=max && p->data>=min) { r->next=p->next; free(p); p=r->next; } else { r=p; p=p->next; } } } int main() { LinkList L; TailCreate(L); displayList(L); printf("\n"); Delete(L,2,5); displayList(L); return 0; }