百度笔试算法第二题:如何判断两个单向链表是否有相交,并找出交点
2012-05-23 20:15
609 查看
1.复杂的就是一个一个的判断,复杂度O(m*n);
2.稍微便捷点的就是判断最后一个节点是否相等,复杂度O(m+n);
3.知道了两个链表的长度len1,len2,那么先让长的链表向后遍历abs(len1-len2),再进行同时遍历并一对一比较,这样的话复杂度为O(max(m,n))。
O(m+n)的代码如下:
View Code
2.稍微便捷点的就是判断最后一个节点是否相等,复杂度O(m+n);
3.知道了两个链表的长度len1,len2,那么先让长的链表向后遍历abs(len1-len2),再进行同时遍历并一对一比较,这样的话复杂度为O(max(m,n))。
O(m+n)的代码如下:
View Code
/*=========================================================================== * Function name: FindNode * Parameter: pHead1,pHead2分别为待判断的链表头结点 * Precondition: 两个链表已经建立 * Postcondition: NONE * Description: 判断两个单向链表是否有交点并返回交点 * Return value: 交点 ===========================================================================*/ NODE* FindNode(NODE* pHead1, NODE* pHead2) { NODE* p1 = pHead1; NODE* p2 = pHead2; int i = 1, j = 1, k = 0, f = 0; if(pHead2 == NULL || pHead2 == NULL) { return NULL; } while(p1->next != NULL) { p1 = p1->next; i++; } while(p2->next != NULL) { p2 = p2->next; j++; } if(p1 != p2) { return NULL; } else { f = fabs(i, j); if(i > j) { p1 = pHead1; p2 = pHead2; } else { p1 = pHead2; p2 = pHead1; } for(k=0; k<f; k++) { p1 = p1->next; } while(p1 != p2) { p1 = p1->next; p2 = p2->next; } return p1; } }
相关文章推荐
- 如何判断两个单向链表是否有相交,并找出交点
- 如何判断两个单向链表是否有相交,并找出交点
- 如何判断两个单向链表是否有相交,并找出交点
- 如何判断两个单向链表是否有相交,并找出交点
- 如何判断两个单向链表是否有相交,并找出交点 (转)
- 如何判断两个单向链表是否有相交,并找出交点
- 如何判断两个单向链表是否有相交,并找出交点
- 数据结构和算法设计专题之---判断两个链表是否相交并找出交点
- 【算法之链表(二)】判断两个链表是否相交并找出交点
- 判断两个单向链表是否有相交,并找出交点。
- 判断两个链表是否相交并找出交点
- 题目:①判断一个单向链表是否有环,如果有环则找到环的入口节点。 ②判断两个单向链表是否相交,如果相交则找到交点节点。
- 判断两个链表是否相交并找出交点-笔记
- 判断两个链表是否相交并找出交点
- 判断两个单向链表是否相交,并求出交点(要求O(1)的额外空间)
- 两个单向链表,判断它们是否相交,若相交,找出它们的第一个公共的结点
- 判断两个链表是否相交并找出交点
- 判断两个链表是否相交并找出交点
- 判断两个链表是否相交并找出交点
- 判断两个链表是否相交并找出交点