2012-02-14 3 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

이 숙제가 있습니까? 그렇다면 태그를 사용하십시오. –

+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

관련 문제