判断子串

题目:存在两个单链表序列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;
}

用最少的悔恨应对过去;用最少的浪费应对此刻;用最多的梦想应对未来!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

北街学长

你的鼓励使我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值