通过查找键值的函数在地图中搜索没有正确发生

时间:2016-05-05 11:35:03

标签: c++ stl linked-list

在下面的代码中,我通过键值在地图中执行搜索,但是虽然两个列表中都存在常见元素并且使用map查找应该给出预期输出,但是无法获得所需的结果。 使用地图执行查找时是否有任何问题?这是正确的做法吗?

输入

list1的:10→15-将4-→20 list2中:10→2→4-> 8

预期产量: 共>数据= 4 共>数据= 10

 #include <iostream>
    #include <stdio.h>
    #include <stdlib.h>
    #include <map>
    using namespace std;
    struct node
    {
        int data;
        struct node* next;
    };
    /* A utility function to insert a node at the beginning of 
       a linked list*/
    void push(struct node** head_ref, int new_data);
    /* A utility function to insert a node at the begining of a linked list*/
    void push (struct node** head_ref, int new_data)
    {
        /* allocate node */
        struct node* new_node =
            (struct node*) malloc(sizeof(struct node));
        /* put in the data */
        new_node->data = new_data;
        /* link the old list off the new node */
        new_node->next = (*head_ref);
        /* move the head to point to the new node */
        (*head_ref) = new_node;
    }
     /*insert the head1 into map and find the head2 in map*/
    int create_hash(struct node* head1,struct node* head2)
    {
      int flag=0;
     map<node*,bool> intersect;

    while(head1!=NULL)
    {
    printf("first_list->data=%d\n",head1->data);
    intersect[head1]=true;
    head1=head1->next;
    }
    while(head2!=NULL)
    {
    printf("second_list->data=%d\n",head2->data);
    if (intersect.find(head2)!= intersect.end())
           printf("common->data=%d\n",head2->data); 
           flag=1;
           head2=head2->next;
    }
    if(flag==1)
    {
    return 0;
    }
    return -1;
    }
    /* Drier program to test above function*/
    int main()
    {
        /* Start with the empty list */
        struct node* head1 = NULL;
        struct node* head2 = NULL;
        int ret_val;
        struct node* unin = NULL;
        /*create a linked lits 10->15->4->20 */
        push (&head1, 20);
        push (&head1, 4);
        push (&head1, 15);
        push (&head1, 10);
        /*create a linked list 10->2->4->8 */
        push (&head2, 10);
        push (&head2, 2);
        push (&head2, 4);
        push (&head2, 8);
        ret_val = create_hash (head1, head2);
        return 0;
    }

1 个答案:

答案 0 :(得分:1)

使用第一个列表中的指向节点的指针填充intersect地图,然后在该地图中搜索指向第二个列表中节点的指针。由于节点不在列表之间共享,因此搜索将永远不会成功。

在此实现的上下文中,映射应包含数据值,而不是节点指针。