私は自分のリンクリストに逆関数を書いていますが、リスト内の新しい最初の番号を指す方法を見つけることができません。私が修正したくない他の関数があるので、headでListNode *をmainで宣言して参照渡しすることはできません。これを行う他の方法はありますか?ここに私のヘッダーファイルは次のとおりです。リンクリストリバース機能OOP C++
// Specification file for the NumberList class
#ifndef NUMBERLIST_H
#define NUMBERLIST_H
class NumberList
{
private:
// Declare a structure for the list
struct ListNode
{
double value; // The value in this node
struct ListNode *next; // To point to the next node
};
ListNode *head; // List head pointer
public:
// Constructor
NumberList()
{ head = nullptr; }
// Destructor
~NumberList();
// Linked list operations
void appendNode(double);
void insertNode(double);
void deleteNode(double);
int searchList(double);
void reverseList() const;
void displayList() const;
};
#endif
ここには逆の機能があります。頭を置く= previousNodeは動作しません。
void NumberList::reverseList() const
{
ListNode *currentNode; // points to current node
ListNode *previousNode = nullptr; // stores address of previous node
ListNode *nextNode = nullptr; // stores the address of next node
ListNode *tempNode = nullptr; //
currentNode = head;
while (currentNode != nullptr)
{
cout << "current value: " << currentNode->value << endl;
nextNode = currentNode->next;
currentNode->next = previousNode;
previousNode = currentNode;
currentNode = nextNode;
}
//head = previousNode;
}
*編集:(メインで追加)
#include <iostream>
#include <fstream>
using namespace std;
#include "NumberList.h"
int main()
{
NumberList nList;
ifstream inFile;
double number;
double searchedNum;
inFile.open("input.txt");
if (!inFile)
{
cout << "File could not be opened!" << endl;
}
else
{
while (inFile >> number)
{
nList.appendNode(number);
}
cout << "The list after file reading:" << endl;
nList.displayList();
cout << "What number would you like to search for? ";
cin >> searchedNum;
cout << "Position: " << nList.searchList(searchedNum) << endl;
cout << "The list after reversing:" << endl;
nList.reverseList();
nList.displayList();
}
return 0;
}
main()の最初のオブジェクトを作成し、main()のポインタ(head)を作成します。いくつの新しいオブジェクトを作成するかは関係ありません(リンクされたリスト)、頭は頭に留まります。次に、関数を呼び出すたびに頭のコピーを送信するか、参照で送信しますが、何もしないうちにその関数内でそのコピーを取っています。今、リンクされたリストはサイクルのように見えますか? (最後のノードが最初のノードを指している) –