查看文章
 
3.6链表相交
2008-07-15 10:28 P.M.

扩展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;

}


类别:编程之美||添加到搜藏 |分享到i贴吧|浏览(1915)|评论 (0)
 
 
最近读者:
 
网友评论:
发表评论:
姓 名:
网址或邮箱: (选填)
内 容:
     

   
帮助中心 | 空间客服 | 投诉中心 | 空间协议
©2012 Baidu