题目:存在两个单链表序列A、B,设计函数判断B是否为A的子序列。
分析:
最直接的方法:循环遍历,从A链的第一个元素开始与B链对比,如遇见不同,从A链下一个又开始,直至到达链尾。还有可以使用KMP快速匹配,这里暂不做讲解。
代码:
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();
a = createLink();
b = createLink();
subList(a,b);
return 0;
}
用最少的悔恨应对过去;用最少的浪费应对此刻;用最多的梦想应对未来!