如何判断两条链表是否相交

来源:互联网 发布:阿里云机顶盒破解 编辑:程序博客网 时间:2024/05/16 19:04
  链表如果有交点,就代表链表L1某个p1节点和链表L2某个p2节点相同。所以不管如何,最后交汇一起呈Y型或者V型。
  1.那么判断是否有交点也很简单,可以定义一个数组存放各一个链表每个节点的地址,再遍历另一条链表,看是否存在节点地址和数组中的元素相同。如果相同就有交点,代码如下;

Node* fx(Node *p1,Node *p2)

{

Node * arr[20];

int i=0;

   for(;p1!=NULL;p1=p1->next)

   {

   arr[i]=p1;

         i++;

    }

   for(;p2!=NULL;p2=p2->next)

   {

     for(int j=0;j<=i;j++)

 

      {

          if(p2==arr[j])

           {return p2;}

 

        }

   }

   return NULL;

}

为了偷懒随意定义了一个长度为20的数组,如果要实用化可以改为可扩容数组;

2.还有一种方法就是不论是v型还是Y型相交,都可以看得出,如果相交的话,两个链表的最后一个节点应该是一样的。因此可以2条链表同时遍历,然后存储下最后一个节点的地址,比较两个地址是否相等就能判断是否相交了。


3.最后一种方法,让第一条链表先遍历到最后,第一条链表最后的节点的next应该为null吧,把它指向第二条链表的头结点,这样就把问题转化为第二条链表是否有环了,如果有环,则代表有交点,无环则无交点。

原创粉丝点击