2016-04-09 96 views
0

我已經編寫了兩個linkedLists的交集的代碼。我嘗試了在Leetcode網站的 ,我的代碼沒有任何錯誤地運行。我正在嘗試使用主驅動中的自定義函數,而我沒有收到所需的輸出。整數列表的交集 - 無法返回結果列表

不知道我要去哪裏錯了。任何人都可以指出我錯過了什麼嗎?

#include <iostream> 
#include <string> 
#include <cstring> 

using namespace std; 

struct ListNode { 

int val; 
ListNode *next; 
ListNode(int x): val(x), next(NULL) {} 
}; 

class Solution { 
public: 
    ListNode *getIntersection(ListNode *A, ListNode *B) { 
     ListNode *p1 = A; 
     ListNode *p2 = B; 


     if(p1==NULL || p2==NULL) 
      return NULL; 

     while(p1!=NULL && p2!=NULL && p1!=p2) { 
      p1=p1->next; 
      p2=p2->next; 

      if(p1==p2) 
       return p1; 

      if(p1==NULL) p1=B; 
      if(p2==NULL) p2=A;  
     } 

     return p1; 
    } 

    void print(ListNode *p) { 
     while(p!=NULL) { 
      cout<< p->val << " " ; 
      p=p->next; 
     } 

     cout<<endl; 
    } 
}; 

int main() { 
    Solution s; 
    ListNode *p1 = new ListNode(5); 
    p1->next = new ListNode(11); 

    s.print(p1); 
    //similar for p2 

    ListNode *p2 = new ListNode(6); 
    p2->next = new ListNode(11); 
    s.print(p2); 

    s.getIntersection(p1,p2); 
    return 0; 
} 
+0

編寫這樣的代碼時,確實有助於進行一些可靠的單元測試,以驗證它是否正常工作。你有這些嗎? – tadman

回答

1

我認爲主要的問題是,在while循環中你比較pointer-to-ListNode,而不是包含在ListNode值(S):

while(p1!=NULL && p2!=NULL && **p1!=p2**) { 
           ^^^^^^^^^^^ 
           here 
    p1=p1->next; 
    p2=p2->next; 

    **if(p1==p2)** 
    ^^^^^^^^^^^^^^ 
    and here 
     return p1; 

你應該做的事:

while(p1!=NULL && p2!=NULL && p1->val!=p2->val) { 
    .... 

然後存在一個問題,即您計算的內容可能不是「交叉點」,但這是一個不同的問題。