編程之美3.6 編程判斷兩個鏈表是否相交

7. 編程判斷兩個鏈表是否相交。 
兩種方法:
1. 把第二個鏈接在第一個鏈後面,如果得到的鏈表有環,則兩鏈表相交。
O(n)的方法判斷是否有環,申請兩個指針,一個每次遞增一步,一個每次遞增兩步,如果有環,兩者必然重合。
2.遍歷第一個鏈表,記錄最後一個節點。然後遍歷第二個鏈表,將最後一個節點和第一個鏈表的最後一個節點作比較。時間複雜度:O((length(h1)+length(h2)))。
#include <iostream>
#include <cstdlib>
using namespace std;
struct node 
{
      int data;
      node *next;
};
int main()
{
    node *head = newnode;
    node *p = head;
    node *q;
    int a;
    int b;
    cin>> a;
   head->data = a;
    while(cin>> b) 
    {
            if(b == 0)
                break;
            q = new node;
            q->data = b;
            p->next = q;
            p = q;
    }
    p->next =head;
    node *p1, *p2;
    p1 = head;
    p2 =p1->next;
    while(p1 != p2&& p2 != NULL&& p2->next !=NULL)
    {
           p1 = p1->next;
           p2 =p2->next->next;
    }
    if(p1 == p2)
         cout<< "Have circle"<< endl;
    else
       cout << "Don'thave circle" << endl;
    system("pause");
    return 0;
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章