头文件
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE
struct node{
int data;
node* next;
};
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = nullptr);
~MainWindow();
void createnodelist(int size);
void resevernodelist();
private:
Ui::MainWindow *ui;
int m_size;
node* m_head;
};
#endif // MAINWINDOW_H
cpp文件
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QDebug>
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
m_head = new node;
m_head->next = NULL;
m_head->data = 0;
m_size = 0;
createnodelist(5);
resevernodelist();
}
MainWindow::~MainWindow()
{
delete ui;
}
//创建链表
void MainWindow::createnodelist(int size)
{
//头插法
int i = 1;
node* temp = m_head;
while (m_size < size) {
node* p = new node;
p->data = i++;
temp->next = p;
temp = p;
m_size++;
}
temp->next = NULL;
// 遍历打印
temp = m_head;
while (temp != NULL) {
qDebug()<<"-------------create"<<temp->data;
temp = temp->next;
}
}
//链表反转
void MainWindow::resevernodelist()
{
node* bak = m_head;
node* p = m_head;
node* q = m_head;
while (p != NULL) {
q = p; //备份p
p = p->next; //左边节点指向下一个节点
q->next = bak; //备份节点指向左边,实现当前节点反转
bak = q; //左边节点指向上一个节点
}
m_head->next = NULL; //头节点已经成了末尾节点,所以next置NULL
m_head = bak; //更新到新的头节点
// 遍历打印
node* temp = m_head;
while (temp != NULL) {
qDebug()<<"-------------resever"<<temp->data;
temp = temp->next;
}
}