2012-02-14 80 views
1
public void setIntersection(LinkList list1, LinkList list2) { 
    LinkList list4 = new LinkList(); 
    Node a = list1.head; 
    Node b = list2.head; 
    while (a != null && b != null) { 
     if (a.value < b.value) { 
      a = a.next; 
     } else if (a.value > b.value) { 
      b = b.next; 
     } else if (a.value == b.value){ 
      list4.insert(a.value); 
      a = a.next; 
      b = b.next; 
     } 
    } 
    list4.printList(); 
} 

我想找出出現在列表1和列表2中的常見值並將條目保存在List4中。雖然這看起來很簡單,但我仍然覺得我的代碼太長,並且想知道是否有更有效的方法來解決這個問題?如何檢查兩個鏈接列表之間的共同值?

+0

這功課嗎?如果需要,請使用標籤。 – 2012-02-14 10:00:49

+0

不,這不是。這是一個面試問題,我只是想看看是否有更好的解決方案。 – Naveen 2012-02-15 18:28:53

回答

1
struct LinkList 
{ 
    int data; 
    struct LinkList *next; 
}*list1,*list2,*list4; 

public void setIntersection(LinkList *list1, LinkList *list2) 
{ 
    LinkList *temp, *temp1, *temp2, *node; 
    for(temp1 = list1;temp1!=null;temp1=temp1->next) 
    { 
    enter code here for(temp2 = list2;temp2!=null;temp2=temp2->next) 
     { 
       if(temp1->data == temp2->data) 
       { 
        node = (struct LinkList *)malloc(sizeof(struct LinkList)); 
        node->next = null; 
        if(list4==null) 
        { 
         list4 = node; 
        } 
        else 
        { 
         for(temp = list4;temp->next!=NULL;temp=temp->next); 
         temp->next = node; 
        } 
       } 
     } 
    } 
} 
+0

謝謝,我想這應該工作。但我覺得這個問題的時間複雜性仍然與我的解決方案相同。有沒有更好的方法可以找到解決方案?如我錯了請糾正我。 – Naveen 2012-02-15 00:07:37