链表 | 判断链表B是否为链表A的连续子序列
王道P38T16
代码:
bool common_subSequence(LinkList &A,LinkList &B){
LNode *pA,*pB=B->next,*p=A->next;
while(p!=NULL){
if(p==NULL || pB==NULL) return false;
if(p->data == pB->data){
pA=p;
while(pA!=NULL && pB!=NULL){
if(pA->data != pB->data){
break;
}
pA=pA->next;
pB=pB->next;
}
if(pB==NULL)
return true;
pB=B->next;
}
p=p->next;
}
return false;
}
主代码:
#include <cstdio>
#include <stdlib.h> using namespace std; typedef struct LNode{
int data;
struct LNode* next=NULL;
LNode(int x=){
data=x;
}
}LNode; typedef LNode* LinkList; LinkList build_list(int * arr,int n){
int i;
LinkList L=new LNode;
LinkList pre=L;
for(i=;i<n;i++){
LinkList p=new LNode(arr[i]);
pre->next=p;
pre=p;
}
return L;
} void show_list(LinkList& L){
LinkList p=L->next;
while(p){
printf("%d ",p->data);
p=p->next;
}
puts("");
} bool common_subSequence(LinkList &A,LinkList &B){
LNode *pA,*pB=B->next,*p=A->next;
while(p!=NULL){
if(p==NULL || pB==NULL) return false;
if(p->data == pB->data){
pA=p;
while(pA!=NULL && pB!=NULL){
if(pA->data != pB->data){
break;
}
pA=pA->next;
pB=pB->next;
}
if(pB==NULL)
return true;
pB=B->next;
}
p=p->next;
}
return false;
} int main(){
int A_arr[]={,,,,};
int B_arr[]={,,};
LinkList A=build_list(A_arr,);
LinkList B=build_list(B_arr,);
puts(common_subSequence(A,B)?"Yes":"No");
}
注意:
注意紫色代码处的工作指针p的滑动和橙色代码处的pB空指针判断。
链表 | 判断链表B是否为链表A的连续子序列的更多相关文章
- 判断序列B是否是序列A的连续子序列
算法思想:因为两个整数序列已存入两个链表中,操作从两个链表的第一个结点开始,若对应得数据相等,则后移指针,若对应的数据不等,则A列表从上次开始比较结点的后继开始,B链表仍从第一个结点开始,直到B链表到 ...
- 链表插入和删除,判断链表是否为空,求链表长度算法的,链表排序算法演示——C语言描述
关于数据结构等的学习,以及学习算法的感想感悟,听了郝斌老师的数据结构课程,其中他也提到了学习数据结构的或者算法的一些个人见解,我觉的很好,对我的帮助也是很大,算法本就是令人头疼的问题,因为自己并没有学 ...
- LeetCode OJ:Palindrome Linked List(回文链表判断)
Given a singly linked list, determine if it is a palindrome. Follow up:Could you do it in O(n) time ...
- LeetCode 234. Palindrome Linked List(判断是否为回文链表)
题意:判断是否为回文链表,要求时间复杂度O(n),空间复杂度O(1). 分析: (1)利用快慢指针找到链表的中心 (2)进行步骤(1)的过程中,对前半部分链表进行反转 (3)如果链表长是偶数,首先比较 ...
- C语言 链表的使用(链表的增删查改,链表逆转,链表排序)
//链表的使用 #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<stdlib.h> #include< ...
- [剑指offer] 14. 链表中倒数第K个节点+翻转+逆序打印+合并两个排序链表 + 链表相交(第一个公共节点) (链表)
题目描述 输入一个链表,输出该链表中倒数第k个结点. 思路: 两个指针,起始位置都是从链表头开始,第一个比第二个先走K个节点,当第一个走到链表尾时,第二个指针的位置就是倒数第k个节点.(两指针始终相 ...
- 数据结构与算法系列2 线性表 链表的分类+使用java实现链表+链表源码详解
数据结构与算法系列2.2 线性表 什么是链表? 链表是一种物理存储单元上非连续,非顺序的存储结构,数据元素的逻辑顺序是通过链表的链接次序实现的一系列节点组成,节点可以在运行时动态生成,每个节点包括两个 ...
- Python链表的实现与使用(单向链表与双向链表)
参考[易百教程]用Python实现链表及其功能 """ python链表的基本操作:节点.链表.增删改查 """ import sys cl ...
- c语言——单链表分拆——头插法创建链表,尾插法生成链表
#if 1 #include<stdio.h> #include<stdlib.h> #include<iostream> using namespace std; ...
- 剑指Offer 56. 删除链表中重复的结点 (链表)
题目描述 在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针. 例如,链表1->2->3->3->4->4->5 处理后 ...
随机推荐
- 基于Mybatis-Plus实现自动化操作创建时间和修改时间
引入 在实际开发中,总会避免不了操作数据库,而在数据库中每个表都会有create_time和update_time字段记录操作时间,我们在操作这两个时间的时候也可能会出现不一致的情况,或者说这两个字段 ...
- Redis和数据库一致性
1.实时同步 对强一致要求比较高的,应采用实时同步方案,即查询缓存查询不到再从DB查询,保存到缓存: 更新缓存时,先更新数据库,再将缓存的设置过期(建议不要去更新缓存内容,直接设置缓存过期 ...
- .net Dapper 实践系列(5) ---事务编辑(Layui+Ajax+Dapper+MySQL)
目录 写在前面 实践步骤 写在前面 上一小节,我们总结了根据Id查询多表数据,最后返回Json对象给前台的例子.接下来,在这一小节我们要实现多表编辑的操作. 实践步骤 因为上一小节以及创建了Edit视 ...
- java基础 接口静态方法
/** * 从java8开始,接口当中允许定义静态方法 * 格式: * public static 返回值类型 方法名称(参数列表){ * 方法体 * } * 提示:就是将abstract或者defa ...
- pickle导入变量AttributeError的解决方案
问题描述: AttributeError: 'module' object has no attribute ‘attr1’ 解决方案: # 找到报错的文件a.py from a import att ...
- Django的安全攻击
目录 Django的安全攻击 XSS XSS(跨站脚本攻击) 危害 原理 防护 csrf(Cross Site Request Forgery) csrf(跨站域请求伪造) 过程 Django 提供的 ...
- Java 8 New Features
What's New in JDK 8 https://www.oracle.com/technetwork/java/javase/8-whats-new-2157071.html Java Pla ...
- vuex简单化理解和安装使用
1.简单化理解 首先你要明白 vuex 的目的 就是为了 集中化的管理项目中 组件所有的 数据状态 (state) 0. 第一步你要明白 , store 的重要性 , store 类似一个中央基站, ...
- css中absolute设置问题和如何让div居中
今天设置多个div到页面正中间的时候,在第一层<div class="map">中设置如下: .map{ position:absolute: top:50%; lef ...
- idea搭建一个简单的springboot项目
1.file->new->project 2.选中Spring Initializr 3.填写项目信息: 4.选中Web -> Spring Web