30.png

    同9解法

    31.png

    1. /*
    2. 在一个递增有序的线性表中,有数值相同的元素存在,若存储方式为单链表,设计算法去掉数值相同的元素,使表中不再有重复的元素。
    3. 分析:
    4. 对于这类去重,我们肯定需要进行遍历,而这道题给我们的是递增有序的序列,我们便可以进行一一比较,后一个元素与当前元素相同
    5. 时便删除当前元素
    6. */
    7. struct Link {
    8. int data;
    9. struct Link *next;
    10. };
    11. #include <stdio.h>
    12. #include <stdlib.h>
    13. void deleteRep(Link *h) {
    14. struct Link *pre = h, *p = h->next, *r;//删除节点必备三剑客
    15. while (p->next) {
    16. if (p->data==p->next->data) {//当前节点与后续节点值相同,则删除并释放空间
    17. r = p->next;//必须先保存后续节点,防止断链
    18. pre->next = p->next;
    19. free(p);
    20. p = r;
    21. continue;
    22. }
    23. pre = p;
    24. p = p->next;
    25. }
    26. }
    27. int main() {
    28. struct Link * head;
    29. Link *createLink(int);
    30. void printfNowLink(Link *);
    31. head = createLink(0);
    32. deleteRep(head);
    33. printfNowLink(head);
    34. return 0;
    35. }