我正在为我的链接列表编写一个反向函数,但我无法弄清楚如何指向列表中新的第一个数字。在main中声明一个ListNode *并通过引用传递它将无法工作,因为我有一堆其他函数我不想修改。有没有其他方法这样做?这是我的头文件:
// 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
这是反向功能。 put head = 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;
}
*编辑:添加在main()
中#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;
}
答案 0 :(得分:1)
这是一个迭代版本(我用// Added *
标记了更改):
void NumberList::reverseList()
{
ListNode *currentNode; // points to current node
ListNode *previousNode = nullptr; // stores address of previous node
ListNode *nextNode = nullptr; // stores the address of next node
currentNode = head;
ListNode* temp; // Added*
while (currentNode != nullptr)
{
temp = currentNode->next; // Added *
nextNode = currentNode->next;
currentNode->next = previousNode;
previousNode = currentNode;
currentNode = temp; // Added *
}
}
答案 1 :(得分:0)
ListNode * reverse_list(ListNode * list, ListNode * new_head = nullptr)
{
if (list == nullptr) return new_head;
ListNode * tmp = list->next;
list->next = new_head;
return reverse_list(tmp, list);
}
head = reverse_list(head);