//--------------------- list.h ----------------------------
#ifndef LIST_H_
#define LIST_H_
#include <cstdlib>
using std::nullptr_t;
class Node
{
public:
Node() {}
Node(int dat, Node* nxt = NULL) : data(dat), next(nxt) {}
int data;
Node* next;
};
class List
{
public:
List() : first(NULL), last(NULL) {}
~List();
void create(int n);
Node* first;
Node* last;
};
#endif LIST_H_
//------------------------------list.h-----------------------------
//-----------------------------list.cpp---------------------------
#include "list.h"
List::~List()
{
while (first->next != first)
{
Node* p = first->next;
first->next = p->next;
delete p;
}
delete first;
}
void List::create(int n)
{
for (int i = 1; i <= n; ++i)
{
Node* newNode = new Node(i);
if (i == 1)
{
first = newNode;
last = newNode;
}
else
{
last->next = newNode;
last = newNode;
}
last->next = first; //构成环
}
}
//------------------------------------list.cpp----------------------------------
//----------------------------------main.cpp------------------------------
#include <iostream>
#include "list.h"
using namespace std;
void Josephus(List& list, int n, int m);
int main()
{
List list;
list.create(8);
Josephus(list, 8, 3);
cout << list.first->data << endl;
system("pause");
return EXIT_SUCCESS;
}
void Josephus(List& list, int n, int m)
{
Node* cur = list.first;
Node* pre = NULL;
for (int i = 0; i < n - 1; ++i)
{
for (int j = 1; j < m; ++j)
{
pre = cur;
cur = cur->next;
}
cout << "Out: " << cur->data << endl;
pre->next = cur->next;
delete cur;
cur = pre->next;
}
}
这个程序运行到最后有问题,求解
#ifndef LIST_H_
#define LIST_H_
#include <cstdlib>
using std::nullptr_t;
class Node
{
public:
Node() {}
Node(int dat, Node* nxt = NULL) : data(dat), next(nxt) {}
int data;
Node* next;
};
class List
{
public:
List() : first(NULL), last(NULL) {}
~List();
void create(int n);
Node* first;
Node* last;
};
#endif LIST_H_
//------------------------------list.h-----------------------------
//-----------------------------list.cpp---------------------------
#include "list.h"
List::~List()
{
while (first->next != first)
{
Node* p = first->next;
first->next = p->next;
delete p;
}
delete first;
}
void List::create(int n)
{
for (int i = 1; i <= n; ++i)
{
Node* newNode = new Node(i);
if (i == 1)
{
first = newNode;
last = newNode;
}
else
{
last->next = newNode;
last = newNode;
}
last->next = first; //构成环
}
}
//------------------------------------list.cpp----------------------------------
//----------------------------------main.cpp------------------------------
#include <iostream>
#include "list.h"
using namespace std;
void Josephus(List& list, int n, int m);
int main()
{
List list;
list.create(8);
Josephus(list, 8, 3);
cout << list.first->data << endl;
system("pause");
return EXIT_SUCCESS;
}
void Josephus(List& list, int n, int m)
{
Node* cur = list.first;
Node* pre = NULL;
for (int i = 0; i < n - 1; ++i)
{
for (int j = 1; j < m; ++j)
{
pre = cur;
cur = cur->next;
}
cout << "Out: " << cur->data << endl;
pre->next = cur->next;
delete cur;
cur = pre->next;
}
}
这个程序运行到最后有问题,求解