27.png

    1. /*
    2. 设一个带头结点的单链表所有元素的数据值无序,试编写函数删除表中介于给定的两个值(作为函数参数给出)之间的元素。
    3. 分析:
    4. 分别设置pre,p,r指针,遍历,符合条件便进行删除。
    5. */
    6. struct Link {
    7. int data;
    8. struct Link *next;
    9. };
    10. #define _CRT_SECURE_NO_WARNINGS
    11. #include <stdio.h>
    12. #include <stdlib.h>
    13. void deleteNum(Link *h,int min,int max) {
    14. struct Link *pre = h, *p = h->next, *r;
    15. while (p) {
    16. if (p->data>min&&p->data<max) {//符合条件,进行删除
    17. r = p->next;
    18. pre->next = p->next;
    19. free(p);
    20. p = r;
    21. }
    22. else {
    23. pre = p;
    24. p = p->next;
    25. }
    26. }
    27. }
    28. int main() {
    29. int min, max;
    30. struct Link*head;
    31. Link *createLink(int);//创建链表的代码我单独封装了一个文件
    32. void printfNowLink(Link*);
    33. head = createLink(0);
    34. printf("请输入要删除的值所在的范围:\n");
    35. printf("min=");
    36. scanf("%d",&min);
    37. printf("max=");
    38. scanf("%d", &max);
    39. deleteNum(head,min,max);
    40. printfNowLink(head);
    41. return 0;
    42. }