如何使用链表创建交叉函数?

时间:2013-12-25 02:21:06

标签: c++ data-structures

这是链接列表代码,那么如何制作两个不同的列表并显示它们之间的交集?  例如,有两个名为L1和L2的链表,那么如何实现一个显示这两个列表交集的函数,如L1有1,2,3,4,5和L2有11,3,4 所以结果将是3,4。

#include <iostream>
using namespace std;
#include "Node.h"

class DoublyLinkedList{
private:
    Node* head; 
    Node* tail;
    Node* list; 
    int elementCount;

public:
    DoublyLinkedList(){

        head = tail = list = NULL;
        elementCount = 0;
    }

    void insertAtFront(int item){
        elementCount++;
        Node* newNode;
        newNode = new Node;
        newNode->data = item;
        list = head;

        if(list == NULL) { 
            head = newNode;
            tail = head;
            return;
        }

        newNode->next = head;
        head->prev = newNode;
        head = newNode;


        head->prev = tail;
        tail->next = head;
    }

    void insertAtEnd(int item){
        elementCount++;
        Node* newNode;
        newNode = new Node;
        newNode->data = item;
        list = head;

        if(list == NULL){ 
            head = newNode;
            tail = head;
            return;
        }

        tail->next = newNode;
        newNode->prev = tail;
        tail = newNode;


        head->prev = tail; 
        tail->next = head;
    }


    bool insertAtIndex(int item, int index){
        if(index > elementCount){
            cout << "Invalid index" << endl;
            return false;
        }
        else if(index == 0){
            insertAtFront(item);
        }
        else if(index == elementCount){
            insertAtEnd(item);
        } 
        else {
            Node* newNode = new Node;
            newNode->data = item;

            list = getNodeAt(index - 1);

            newNode->next = list->next; 
            list->next->prev = newNode;
            list->next = newNode;
            newNode->prev = list;
            elementCount++;
        }
        return true;
    }

};

1 个答案:

答案 0 :(得分:3)

由于这是一项学习任务,以下是该方法的一般描述:

  • 定义一个函数bool contains(int value) const,它接受​​int value并在列表包含指定值时返回true;这个函数会有一个循环。
  • 通过以下算法定义产生交集的函数DoublyLinkedList intersectWith(DoublyLinkedList& other) const
  • 制作新的DoublyLinkedList result
  • 对于此列表中的每个项目,请致电other.contains(node.data)
  • 如果函数返回true,请检查result.contains(node.data)是否返回false以消除重复
  • 如果other.contains(node.data) && !result.contains(node.data),请将node.data添加到result
  • 继续到下一个节点,直到此列表用尽
  • 返回result列表。