35.png

    1. /*
    2. 存在两个单链表序列A、B,设计函数判断B是否为A的子序列。
    3. 分析:
    4. 最直接的方法:循环遍历,从A链的第一个元素开始与B链对比,如遇见不同,从A链下一个又开始,直至到达链尾
    5. */
    6. struct Link {
    7. int data;
    8. struct Link *next;
    9. };
    10. #include <stdio.h>
    11. void subList(Link *a,Link *b) {
    12. struct Link *la = a ,*pA = la->next, *pB = b->next;
    13. while (pA&&pB) {
    14. if (pA->data==pB->data) {//相等继续对比下一个
    15. pA = pA->next;
    16. pB = pB->next;
    17. }
    18. else {
    19. pB = b->next;//pb从头开始与pa对比
    20. la = la->next;//失败一次,la往后移动一个节点
    21. pA = la->next;//pa从下一个节点又开始
    22. }
    23. }
    24. pB == NULL ? printf("true") : printf("false");//如果pb为NULL,说明已比对完成
    25. }
    26. int main() {
    27. struct Link *a, *b;
    28. Link *createLink(int);
    29. a = createLink(0);
    30. b = createLink(0);
    31. subList(a,b);
    32. return 0;
    33. }