2012-02-14 6 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に共通の値が表示され、リスト4にエントリが保存されています。これは簡単ですが、私はまだ私のコードが長すぎると感じ、この問題を解決するためのより効率的な方法があるのだろうかと思います。2つのリンクリストの間で共通の値を確認する方法は?

+0

この宿題はありますか?もしそうなら、そのタグを使用してください。 –

+0

これはありません。これはインタビューの質問だったし、もっと良い解決策があるかどうかだけ調べようとしていた。 – Naveen

答えて

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

関連する問題