(1)判断第一个链表的后半部分节点是否在第二个链表中; (2)把第二个链表连接到第一个链表后面,判断整个链表是否有环,有环即为相交。 (3)先遍历第一个链表,记住第一个链表的最后一个节点,然后遍历第二个链表,找到最后一个节点,与第一个链表的最后一个节点相同即为相交。 这三种解法都是针对无环的情况下提...
1、判断第一个链表的每个节点是否在第二个链表中 2、把第二个链表连接到第一个后面,判断得到的链表是否有环,有环则相交 3、先遍历第一个链表,记住最后一个节点,再遍历第二个链表,得到最后一个节点时和第一个链表的最后一个节点做比较,如果相同,则相交 如何判断一个单链表是有环的?(注意不能用标志位,最多...
如 果 两个链表相交,则两个链表就会有共同的结点;而结点地址又是结点唯一标识。因而判断两个链表中是否存在地址一致的节点,就可以知道是否相交了。可以对第一 个链表的节点地址进行hash排序,建立hash表,然后针对第二个链表的每个节点的地址查询hash表,如果它在hash表中出现,则说明两个链表有共 同...
比较好的方法有两个: 将其中一个链表首尾相连,检测另外一个链表是否存在环;如果存在,则两个链表相交,而检测出来的环入口即为相交的第一个结点。 如果两个链表相交,那个两个链表从相交点到链表结束都是相同的节点。我们可以先遍历一个链表,直到尾部,再遍历另外一个链表,如果也可以走到同样的结尾点,则两个链表相交。
思路:在判断是否相交的过程中要分别遍历两个链表,同时记录下各自长度。 Node* step( Node* p, Node* q) { if ( !p || !q ) return NULL; int pLen = 1; int qLen = 1; bool result = false; while( p->next ) { pLen++, p = p->next; ...
如果两个单向链表相交,一定是形成Y字形,而不会是X字形。基于这个想法,可以判断两链表是否相交。 代码 NODE*FindNode(NODE*pHead1, NODE*pHead2) { NODE*p1=pHead1; NODE*p2=pHead2; inti=1, j=1, k=0, f=0; if(pHead2==NULL||pHead2==NULL) ...
1.复杂的就是一个一个的判断,复杂度O(m*n); 2.稍微便捷点的就是判断最后一个节点是否相等,复杂度O(m+n); 3.知道了两个链表的长度len1,len2,那么先让长的链表向后遍历abs(len1-len2),再进行同时遍历并一对一比较,这样的话复杂度为O(max(m,n))。
如果两个单向链表相交,一定是形成Y字形,而不会是X字形。基于这个想法,可以判断两链表是否相交。 代码 NODE*FindNode(NODE*pHead1, NODE*pHead2) { NODE*p1=pHead1; NODE*p2=pHead2; inti=1, j=1, k=0, f=0; if(pHead2==NULL||pHead2==NULL) ...
1.复杂的就是一个一个的判断,复杂度O(m*n); 2.稍微便捷点的就是判断最后一个节点是否相等,复杂度O(m+n); 3.知道了两个链表的长度len1,len2,那么先让长的链表向后遍历abs(len1-len2),再进行同时遍历并一对一比较,这样的话复杂度为O(max(m,n))。