王道综合题17.设计一个算法用于判断带头结点的循环双链表是否对称及其注意思考:while循环第二个判断条件易误写成p->next!=q,分析这样会产生什么问题。
算法思想:
让p从左向右扫描,q从右向左扫描,直到它们指向同一结点(p==q,当循环双链表中结点个数为奇数时)或相邻(p->next=q或q->prior=p,当循环双链表中结点个数为偶数时)为止,若它们所指结点值相同,则继续进行下去,否则返回0。若比较全部相等,则返回1。
int Symmetry(DLinkList L){//本算法从两头扫描循环双链表,以判断链表是否对称DNode *p=L->next, *q=L->prior; //两头工作指针while (p! =q&&q->next! =p) //循环跳出条件if (p->data==q->data) { //所指结点值相同则继续比较p=p->next; q=q->prior;}else //否则,返回0return 0;return 1; //比较结束后返回1
}
探讨问题:
while循环第二个判断条件易误写成p->next!=q,分析这样会产生什么问题.
答:如果写成p->next!=q,那么假如在要判断的链表长度为偶数个时,当p和q分别指向最中间俩个结点,此时根据p->next!=q条件,跳出了循环返回1,若这俩个结点的值是不同的,那么就会产生错误的判断,所以应该先判断这俩个结点的值是否相同,再根据条件q->next!=p跳出循环。
图解:
王道综合题17.设计一个算法用于判断带头结点的循环双链表是否对称及其注意思考:while循环第二个判断条件易误写成p->next!=q,分析这样会产生什么问题。相关推荐
- 数据结构例9.编写一个算法,将带头结点的单向链表 拆分成一个奇数链表和一个偶数链表,并分别输出
/* 编写一个算法,将带头结点的单向链表 拆分成一个奇数链表和一个偶数链表,并分别输出 */ # include <iostream> # include <stdlib.h> ...
- 设计一个算法找一条从迷宫入口到出口的最短路径。_我花了一夜用数据结构给女朋友写个H5走迷宫游戏...
先看效果图(在线尝试请留言): 起因 又到深夜了,我按照以往在公众号写着数据结构!这占用了我大量的时间!我的超越妹妹严重缺乏陪伴而 怨气满满! 超越妹妹时常埋怨,认为数据结构这么抽象难懂的东西没啥作用 ...
- 一串首尾相连的珠子(m个),有N种颜色(N《=10),设计一个算法,取出其中一段,要求包含所有N中颜色,并使长度最短。并分析时间复杂度与空间复杂度。
一串首尾相连的珠子(m个),有N种颜色(N<=10),设计一个算法,取出其中一段,要求包含所有N中颜色,并使长度最短.并分析时间复杂度与空间复杂度. 这道题在网上著名的帖子 微软等公司数据结构+ ...
- 铁路车厢调度问题。图 1 是一个铁道调车场的示意图,两侧铁道均为单向行驶 道,中间有一段用于调度的“栈道”,调车场的入口处有 n 节硬座和软座车厢(分 别用 H 和 S 表示),设计一个算法,把所有的
铁路车厢调度问题.图 1 是一个铁道调车场的示意图,两侧铁道均为单向行驶 道,中间有一段用于调度的"栈道",调车场的入口处有 n 节硬座和软座车厢(分 别用 H 和 S 表示),设 ...
- 数据结构:试设计一个算法,改造一个带表头结点的双向链表,所有结点的原有次序保持在各个结点的右链域rLink中,并利用左链域ILink把所有结点按照其值从小到大的顺序连接起来
题目 试设计一个算法,改造一个带表头结点的双向链表,所有结点的原有次序保持在各个结点的右链域rLink中,并利用左链域ILink把所有结点按照其值从小到大的顺序连接起来 分析 Template < ...
- 问题描述 给定一个由n行数字组成的数字三角形如下图所示。试设计一个算法,计算出从三角形的顶至底的一条路径,使该路径经过的数字总和最大。 对于给定的由n行数字组成的数字三角形,计算从三角形的顶至底
问题描述 给定一个由n行数字组成的数字三角形如下图所示.试设计一个算法,计算出从三角形的顶至底的一条路径,使该路径经过的数字总和最大. 对于给定的由n行数字组成的数字三角形,计算从三角形的顶至底的路径 ...
- 问题描述: 在一个圆形操场的四周摆放着n 堆石子。现要将石子有次序地合并成一堆。 规定每次只能选相邻的2 堆石子合并成新的一堆,并将新的一堆石子数记为该次合并的得分。 试设计一个算法,计算出将n堆石子
问题描述: 在一个圆形操场的四周摆放着n 堆石子.现要将石子有次序地合并成一堆. 规定每次只能选相邻的2 堆石子合并成新的一堆,并将新的一堆石子数记为该次合并的得分. 试设计一个算法,计算出将n堆石子 ...
- 设计一个算法,删除一个单链表L中元素值最大的结点(假设最大值结点是唯一的)
设计一个算法,删除一个单链表L中元素值最大的结点(假设最大值结点是唯一的). #include <stdio.h> #include<malloc.h> typedef str ...
- 回溯法——设计一个算法在1、2、3... 9(顺序不能变)数字之间插入+ 或 - 或什么都不插入,使得计算结果总是100的程序,并输出所有的可能性和全排列
回溯法 题目描述: 设计一个算法在1.2.3- 9(顺序不能变)数字之间插入+ 或 - 或什么都不插入,使得计算结果总是100的程序,并输出所有的可能性.例如1+2+34-5+67-8+9=100 分 ...
最新文章
- python -opencv 使用滑动条 cv2.createTrackbar,cv2.getTrackbarPos(), cv2.setTrackbarPos
- AndroidStudio(1 下载安装,环境搭建,使用设置)
- Devstack 配置文件说明手册
- 拉格朗日插值法的MATLAB源程序
- 超级详细的Tcpdump的用法
- RabbitMQ实现工作队列
- EntityFramework Core 2.0执行原始查询如何防止SQL注入?
- 哪种编程语言好找工作_哪种编程语言可以工作? 为了周末?
- Windows + IDEA + SBT 打造Spark源码阅读环境
- websocket 介绍及实现
- java map原理_Java HashMap底层原理分析
- python图像跟踪代码_python如何实现图像外边界跟踪 python实现图像外边界跟踪代码示例...
- 重置Mysql自增列的开始序号
- 2021-08-25Prompt
- IPD解读--华为500强的研发第一名,除了钱还有IPD
- 《阴阳师》RPG游戏体验报告
- 碰到文件夹损坏咋解决?
- 设计模式(二)——UML类图怎么画
- 数学考研基础---线代笔记(行列式)
- 瓢城旅行社网页界面设计(HTML+CSS)
热门文章
- 0xc0000005 系统应用日志_求大佬来个崩溃日志的分析教程
- 最新ChatGPT网站源码V4.7.8+支持Ai绘画+ChatGPT商业运营版+管理后台+支持用户套餐+好友邀请功能+一键在线更新+永久使用!
- 小程序onPageScroll上滑显示,下滑隐藏
- Bowtie2生成linux的动态链接库.so文件
- 红帽系统配置nginx自启动
- Chrome的Vimium经典教程
- 响应式pbootcms模板投资管理类网站
- word中磅和mm的换算(转载)
- Y2_J2EE_自定义JSP标签
- 网易|前端开发实习生 | 杭州 | 2021 一面面经