簡體   English   中英

如何使鏈表具有交集功能?

[英]How to make an intersection function with linked lists?

這是鏈接列表代碼,那么如何制作兩個不同的列表並顯示它們之間的交集? 例如,有兩個鏈接列表,稱為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;
    }

};

由於這是一項學習任務,因此下面是該方法的一般說明:

  • 定義一個函數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列表。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM