判断两个单链表是否相交?若相交求交点

思想: 如果它们相交,则最后一个节点一定是共有的。

ListNode* IsIntersect(ListNode * list1, ListNode* list2 )
{
                 assert(list1 && list2);
                 ListNode* l1 = list1 ;
                 ListNode* l2 = list2 ;
                 int cout1 = 0;
                 int cout2 = 0;

                 while(l1->_next == NULL )
                {
                                l1 = l1->_next;
                                ++cout1;
                }

                 while(l2->_next == NULL )
                {
                                l2 = l2->_next;
                                ++cout2;
                }

                 if(l1 != l2)
                                 return NULL ;

                l1 = list1;
                l2 = list2;
                 int length = 0;
                 if(cout1 > cout2)
                {
                                length = cout1 - cout2;
                }
                 else
                {
                                length = cout2 - cout1;
                }

                 while(length--)
                {
                                 if(cout1 > cout2)
                                                l1 = l1->_next;
                                 else
                                                l2 = l2->_next;
                }
                
                 while(11)
                {
                                 if(l1 == l2)
                                                 return l1;
                                 else
                                {
                                                l1 = l1->_next;
                                                l2 = l2->_next;
                                }
                }
                 return NULL ;
}
时间: 2025-01-20 21:54:58

判断两个单链表是否相交?若相交求交点的相关文章

【算法导论学习-23】两个单链表(single linked)求交点

问题:A.B两个单链表如果有交点,返回第一个交点在A中的位置(链表头结点位置为0). 分析:A.B如果有交点,交点的后继一定也是交点,所以一定是Y型相交,所以算法的思想如下 1)  求得A.B的长度,比如ALength,Blength 2)  判断ALength,Blength谁大,比如Alength>Blength 3)  Alength移动到Alength-Blength的位置,开始判断每个节点是否相等,相等则退出. 以本博客中"[算法导论学习-20]单链表(single linked

如果判断两个单链表有交?第一个交点在哪里?

检测单链表是否有环 参考:判断单链表里面有没有环

7_2判断两个单链表是否相交,若相交,求出第一个交点

转载请注明出处:http://www.cnblogs.com/wuzetiandaren/p/4251372.html 声明:现大部分文章为寻找问题时在网上相互转载,此博是为自己做个记录记录,方便自己也方便有类似问题的朋友,本文的思想也许有所借鉴,但源码均为本人实现,如有侵权,请发邮件表明文章和原出处地址,我一定在文章中注明.谢谢. 题目:7_2判断两个单链表是否相交,若相交,求出第一个交点. 题目分析: 创建A,B两个单链表,将B的尾部指向头部,若两个单链表相交,则交点必为环的入口,这就又变成

判断两个单链表是否相交及相交的第一个节点

/* 问题: 1.判断两个单链表是否相交 2.找出第一个相交节点 解题思路: 1.若连个链表相交则从相交节点开始以后节点都是一样的 2.通过链表长度判断然后去寻找 */ #include<stdlib.h> #include<stdio.h> /* 创建节点 */ typedef struct STU { char a; struct STU *next; }*SListNode; SListNode ListA; SListNode ListB; /* 创建链表A */ SLis

9.判断两个单链表是否相交

9.判断两个单链表是否相交 注意这里是判断是否相交.对于判断问题来讲,相对还是比较简单的.注意单链表并非不能有重复元素. 思路1:O(len1*len2) 把第一个链表的指针值逐项存在hashtable中,遍历第2个链表的每一项的指针值,如果能在第一个链表中找到,则必然相交.但是C++的STL模板中的hash不太会用.所以我使用了set集合,不过貌似set集合是使用遍历的方式来查找元素是否在集合中的,所以效率是比较低的,至少在O(len1*len2)级别. bool judgeIntersect

判断两个单链表是否相交

题目描述: 给定两个单链表的头节点head1和head2,如何判断两个链表是否相交?相交的话返回true,不想交的话返回false. 给定两个链表的头结点head1和head2.请返回一个bool值代表它们是否相交. 链表中节点的类型设置如下: class ListNode { int val; ListNode next = null; ListNode(int val) { this.val = val; } } 思路: 1.首先判断是否有环, 若两个链表都没有环,则进行无环单链表判断是否相

java判断两个单链表是否相交

转载于:http://blog.csdn.net/happymatilian/article/details/47811161 思路: 链表分有环链表和无环链表,如果两个链表存在相交,则只有两种可能,两个链表都无环或者都有环. (1)如果链表都无环,则先判断链表的尾指针是否一样,如果不一样,则没有相交.如果一样,则找出两个链表的长度差,将两个链表从距离尾节点同样的距离进行扫描,如果相交,则必然有一处扫描节点相同.实例数据List1:1->2->3->4->5->6->7

Intersection of Two Linked Lists (判断两个单链表是否相交)

题目描述: Write a program to find the node at which the intersection of two singly linked lists begins. For example, the following two linked lists: A: a1 → a2 c1 → c2 → c3 B: b1 → b2 → b3 begin to intersect at node c1. Notes: If the two linked lists hav

Java-找出两个单链表的首个公共节点

单链表中的简单算法 /** * 得到两个单链表的公共结点 * 先求出两个链表的长度,并求出二者的差值dif,两个指针分别指向链表头部,让指向长的链表的指针先向链表尾部移动dif步. * 最后一起一步步移动两个指针,当两个指针都指向同一个结点时,返回那个结点 * @param list1 * @param list2 * @return */ public static ListNode getFirstCommonNode(ListNode list1,ListNode list2){ if(l