《编程之美》读书笔记(十):“链表相交”扩展问题
2008-07-30 11:27
323 查看
感谢azuryy提供《编程之美》3.6节“链表相交”扩展问题答案
(原博客地址:http://hi.baidu.com/azuryy/blog/item/18e85b02ec34a4094bfb51de.html)
扩展1:链表1 步长为1, 链表2步长为2 ,如果有环且相交则肯定相遇,否则不相交
list1 head: p1
list2 head: p2
while( p1 != p2 && p1 != NULL && p2 != NULL )
{
p1 = p1->next;
if ( p2->next )
p2 = p2->next->next;
else
p2 = p2->next;
}
if ( p1 == p2 && p1 && p2) //相交
else //不相交
扩展2:在判断是否相交的过程中要分别遍历两个链表,同时记录下各自长度。
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;
}
while( q->next )
{
qLen++, q = q->next;
}
result = ( p == q );
if ( result )
{
int steps = abs( pLen - qLen);
Node* head = pLen > qLen ? p : q;
while ( steps ) //对齐处理
{
head = head->next, steps--;
}
pLen > qLen ? p = head : q = head;
while ( p != q )
{
p = p->next, q = q->next;
}
reutrn p;
}
return NULL;
}
(原博客地址:http://hi.baidu.com/azuryy/blog/item/18e85b02ec34a4094bfb51de.html)
扩展1:链表1 步长为1, 链表2步长为2 ,如果有环且相交则肯定相遇,否则不相交
list1 head: p1
list2 head: p2
while( p1 != p2 && p1 != NULL && p2 != NULL )
{
p1 = p1->next;
if ( p2->next )
p2 = p2->next->next;
else
p2 = p2->next;
}
if ( p1 == p2 && p1 && p2) //相交
else //不相交
扩展2:在判断是否相交的过程中要分别遍历两个链表,同时记录下各自长度。
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;
}
while( q->next )
{
qLen++, q = q->next;
}
result = ( p == q );
if ( result )
{
int steps = abs( pLen - qLen);
Node* head = pLen > qLen ? p : q;
while ( steps ) //对齐处理
{
head = head->next, steps--;
}
pLen > qLen ? p = head : q = head;
while ( p != q )
{
p = p->next, q = q->next;
}
reutrn p;
}
return NULL;
}
相关文章推荐
- 《编程之美》读书笔记(十一):“求二叉树中节点的最大距离”扩展问题
- 《编程之美》读书笔记: 寻找发帖水王的扩展问题 2.3
- 《编程之美》读书笔记(八):“发帖水王”扩展问题
- 《编程之美》3.6判断链表是否相交之扩展:链表找环方法证明
- 《编程之美》3.6判断链表是否相交之扩展:链表找环方法证明
- 《编程之美》3.6判断链表是否相交之扩展:链表找环方法证明
- 判断链表中是否存在环问题、判断两个链表是否相交问题及其扩展
- 《编程之美》读书笔记(十二):“求数组的子数组之和的最大值”扩展问题
- 《编程之美》两链表相交及扩展详解
- 编程之美-判断两个链表是否相交 (涵其扩展问题)
- 《编程之美》读书笔记(二):“求二进制数中1的个数”扩展问题
- 《编程之美》读书笔记(二):“求二进制数中1的个数”扩展问题
- 《编程之美》3.6判断链表是否相交之扩展:链表找环方法证明
- 《编程之美》3.6判断链表是否相交之扩展:链表找环方法证明
- 判断单链表是否存在环,判断两个链表是否相交问题详解
- 经典面试题:链表的相交与环问题
- 编程之美2.10扩展问题求数组中第二大数
- 判断单链表是否存在环,判断两个链表是否相交问题详解
- 【转载】判断单链表是否存在环,判断两个链表是否相交问题详解
- 判断单链表是否存在环,判断两个链表是否相交问题详解