判断连个单链表是否交叉,并找到交叉点
链表如果相交则两个链表的形态应该是Y或者是V型,所以判断两个链表是否相交有两种方式:
一、比较两个链表的尾部是否相同,如果相同则两个链表相交,交叉点可以通过两个链表的长度差进行计算,因为交点后面的长度是相同的,差值是交点前形成的,可以分别设定两个指针,长的链表先遍历到差值的位置,短的链表指向头部,分别遍历直到相等就是交点的所在。
int IsCross(ListNode *p, ListNode *q){if(p == NULL || q == NULL){return 0;}ListNode *node1 = NULL;ListNode *node2 = NULL;while(p != NULL){node1 = p;p = p->next;}while(q != NULL){node2 = q;q = q->next;}if(node1 == node2){return 1;}else{return 0;}
}
寻找交点:
ListNode *FindNode(ListNode *p, ListNode *q){if(p == NULL || q == NULL){return NULL;}ListNode *node1 = p;ListNode *node2 = q;int len1 = 0, len2 = 0;while(node1 != NULL){node1 = node->next;len1++;}while(node2 != NULL){node2 = node2->next;len2++;}int len = len1 > len2 ? len1 - len2 : len2 -len1;ListNode *lenNode = len1 > len2 ? p : q;ListNode *shortNode = len1 < len2 ? p : q;for(int i = 0; i < len + 1;i++){lenNode = lenNode->next;}while(shortNode != NULL && lenNode != NULL && shortNode != lenNode){shortNode = shortNode->next;lenNode = lenNode->next;}return shortNode;
}
二、如果两个链表相交,那么如果将一个链表的首尾相连,那么两个链表和在一起就会形成一个有环的链表,问题就归结到单链表是否有环的问题:
int IsCross(ListNode *p, ListNode *q){if(p == NULL || q == NULL){return 0;}ListNode *t = p;while(t->next != NULL){t = t->next;}t->next = p;ListNode *fast = q;ListNode *slow = q;while(fast != NULL && fast->next != NULL){fast = fast->next->next;slow = slow->next;if(fast == slow){break;}}if(fast != NULL && fast->next != NULL){return 1;}else{return 0;}
}
判断连个单链表是否交叉,并找到交叉点相关推荐
- 判断两个单链表是否相交及找到第一个交点
题目:给两个单链表,如何判断两个单链表是否相交?若相交,则找出第一个相交的节点. 这道题的思路和解法有很多,在这把这道题的解法做一个详细的总结. 解这道题之前,我们需要首先明确一个概念: 如果两个 ...
- c++如何判断两个字符串是否相同?_链表 | 如何判断两个单链表(无环)是否交叉...
如何判断两个单链表(无环)是否交叉 单链表相交指的是两个链表存在完全重合的部分,如下图所示 在上图中,这两个链表相交于结点5,要求判断两个链表是否相交,如果相交,找出相交处的结点. 分析 Hash法 ...
- 7_2判断两个单链表是否相交,若相交,求出第一个交点
转载请注明出处:http://www.cnblogs.com/wuzetiandaren/p/4251372.html 声明:现大部分文章为寻找问题时在网上相互转载,此博是为自己做个记录记录,方便自己 ...
- Java数据结构与算法———(10)单链表应用实例,找到单链表中倒数第K个节点
找到单链表中的倒数第K个节点,并打印输出节点.两段代码,思路都是相似的. 一.代码1 public class SingleLinkedListDemo {public static void mai ...
- java 判断两个单链表是否相交
文章目录 题目 思考 源码 环的入口 题目 单链表可能有环,也可能无环.给定两个单链表的头节点 head1 和 head2, 这两个链表可能相交,也可能不相交.请实现一个函数,如果两个链表相交,请返回 ...
- 判断两个单链表是否相交--java实现
题目描述:单链表可能有环,也可能无环.给定两个单链表的头节点 head1 和 head2, 这两个链表可能相交,也可能不相交.请实现一个函数,如果两个链表相交,请返回相交 的第一个节点;如果不相交,返 ...
- 判断带头结点单链表是否递增有序
#include <bits/stdc++.h> using namespace std;//节点类 struct node {int val;node *next; };bool isS ...
- 单链表——判断两个单链表(无头节点)是否相交,如果相交,返回单链表的第一个结点
本博客主要记录两个解法: 1.求两个单链表的节点个数,消除结点个数不同带来的影响,两个指针一起走,相遇即相交点. 2.数学方式求解. 一.求结点个数,消除结点个数不同带来的影响,俩指针同步走 思路:两 ...
- 判断带头结点单链表是否递增
int judge(LinkList L) {LNode *p=L->next,*q;while(p){while(p->next!=NULL){q=p->next;if(q-> ...
最新文章
- Web漏洞扫描(三:Burp Suite的基本操作)
- 医疗实体链接(标准化)论文解读 (附代码) A Lightweight Neural Model for Biomedical Entity Linking
- 【深度学习】基础知识 | 超详细逐步图解 Transformer
- Python邮件发送案例
- docker镜像制作(二)——构建企业镜像LAMP+BBS
- 深入理解java垃圾回收机制
- Face Alignment by 3000 FPS系列学习总结(一)
- Flash Builder非法关闭导致无法启动
- 深度学习实践与部署(开篇)
- Office365—Exchange管理2—连接Exchange PowerShell
- weico.android批量转发,weico android|Weico新浪微博3.3.5 客户端_手机软件
- Untiy3D - 3 打飞碟小游戏
- 判断单链表是否中心对称算法
- c语言循环语句试讲教案,C语言For循环试讲教案(7页)-原创力文档
- c语言输出星号一行比一行星号少一个,c语言打印空白星号矩形
- 《通信技术导论(原书第5版)》——2.8 增值电话应用系统
- 项目组织战略管理及组织结构
- 数学术语的英汉对照(权威,全面)
- Warning: Class ‘com.xxx.xxx‘ not found in module ‘xxxx‘
- 【Nature重磅】OpenAI科学家提出全新强化学习算法,推动AI向智能体进化