链表反向函数OOP C++
Linked List Reverse Function OOP C++
我正在为链表编写一个反向函数,但我不知道如何指向列表中新的第一个数字。在main中声明head为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
这是反向函数。放置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;
}
这里有一个迭代版本(我用// 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 *
}
}
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);
相关文章:
- c++中的oop(密码生成)
- OOP 中的单成员指针
- OOP使用不同的结构与孩子一起构建建议
- OOP 标识派生对象
- 标识符Class_name未定义C++ oop
- 返回类型在 C++ OOP 中是什么意思
- 这里的以下 OOP 结构是什么?
- C++ OOP 分段错误
- 对OOP和过程编程做出这样的肯定是正确的吗
- OOP 和字符串指针的奇怪行为
- 异常成员类 OOP
- 从一个类访问私有字段到另一个与C++中的前一个类无关的私有字段 (OOP)
- 关于默认构造函数,对象初始化/使用C++ OOP
- 气泡排序C++ OOP
- OOP 气泡排序C++程序
- 函数与返回类型 node* 与 C++ 中的 OOP 结合使用
- 使用 C++ 和 OOP 创建面积计算程序
- 指针 OOP 操作
- 如何使用OOP运行存储在容器中的实际对象的函数?
- 如何使用类中的函数从 main 打印变量,帮助理解 OOP c++