[英]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.