
/*
存在两个单链表序列A、B,设计函数判断B是否为A的子序列。
分析:
最直接的方法:循环遍历,从A链的第一个元素开始与B链对比,如遇见不同,从A链下一个又开始,直至到达链尾
*/
struct Link {
int data;
struct Link *next;
};
#include <stdio.h>
void subList(Link *a,Link *b) {
struct Link *la = a ,*pA = la->next, *pB = b->next;
while (pA&&pB) {
if (pA->data==pB->data) {//相等继续对比下一个
pA = pA->next;
pB = pB->next;
}
else {
pB = b->next;//pb从头开始与pa对比
la = la->next;//失败一次,la往后移动一个节点
pA = la->next;//pa从下一个节点又开始
}
}
pB == NULL ? printf("true") : printf("false");//如果pb为NULL,说明已比对完成
}
int main() {
struct Link *a, *b;
Link *createLink(int);
a = createLink(0);
b = createLink(0);
subList(a,b);
return 0;
}