0
我的代碼假設使用和節點數組創建一個單鏈表。用動態數組模擬單鏈表
每個節點都有一個變量項,它保存數據和下一個變量,它保存列表中下一個節點的索引。最後一個節點在其下一個數據字段中有-1來模擬nullptr。頭部保存列表中第一個節點的索引。
由於某種原因,當我創建一個指針指向它,它提供了以下錯誤陣列中某一節點:
error: cannot convert 'Node' to 'Node*' in initialization|
#include "ArrayList.h"
#include <iostream>
using namespace std;
ArrayList::ArrayList(char ch){
array = new Node[Size];
(array[0]).item = ch;
(array[0]).next = 1;
free = 1;
head = 0;
}
int ArrayList::length() const{
if (head == -1) return 0;
int counter =0;
Node* current = array[head]; // problem occurs here
while(current->next != -1){
counter++;
int index = current->next;
current = current[index];
}
counter++;
return counter;
}
//////////// ////////
#ifndef ARRAYLIST_H
#define ARRAYLIST_H
#include <iostream>
using namespace std;
class Node{
public:
char item;
int next;
Node(){
next = -1;
}
Node(char input){
this->item = input;
next = -1;
}
};
class ArrayList{
public:
ArrayList();
ArrayList(char ch);
Node& operator[](int index);
int length() const;
char getFirst() const;
void print() const;
private:
Node* array;
int Size = 5;
int head = -1;
int free = 0;
};
#endif
////////////////////////
#include <iostream>
#include "ArrayList.h"
using namespace std;
int main(){
ArrayList list('1');
list.print();
return 0;
}
你的想法給了我正確的方向。你是一個生命保護謝謝 – wazeeer
@wazeeer - 一旦你得到它的工作,你可能想嘗試實現一個只改變下一個索引的自頂向下合併排序。它會將索引返回到排序列表的「頭部」,然後array [head] .next將包含第二個節點的索引,依此類推,直到array []。next == -1。對於使用本地索引數組的列表,array_of_indices [i]指向帶有pow(2,i)節點的列表,它的速度更快,但自上而下的版本是更容易理解。 – rcgldr