#include
using namespace std;
typedef struct Node
{
int num;
int password;
struct Node *next;
}List;
List *create(int n)
{
List *p, *q, *head;
int i = 1;
head = new List;
p = head;
cout<<"请输入第"< cin>>p->password ;
for(i = 2;i <= n;i++)
{
q = new List;
cout<<"请输入第"< cin>>q->password ;
p->next = q;
p = p->next ;
}
p->next = head;
return head;
}
int output(List *L)
{
int m, i;
List *p = L, *q, *s;
q = p;
cout<<"请输入m的初值"< cin>>m;
cout<<"出列顺序为:"< while(q != NULL)
{
for(i = 1; i {
q = p;
p = p->next ;
}
q->next = p->next;
cout<password < m = p->password;
q = p->next ;
delete(p);
}
return 0;
}
int main()
{
List *L;
int n;
cout<<"请输入实验人数"< cin>>n;
L = create(n);
output(L);
return 0;
}
该回答引用ChatGPT
这段代码存在一些错误,以下是修复后的代码:
#include <iostream>
using namespace std;
typedef struct Node {
int num;
int password;
struct Node* next;
} List;
List* create(int n) {
List* p, * q, * head;
int i = 1;
head = new List;
p = head;
cout << "请输入第" << i << "个人的密码: ";
cin >> p->password;
for (i = 2; i <= n; i++) {
q = new List;
cout << "请输入第" << i << "个人的密码: ";
cin >> q->password;
p->next = q;
p = p->next;
}
p->next = head;
return head;
}
int output(List* L) {
int m, i;
List* p = L, * q, * s;
q = p;
cout << "请输入m的初值: ";
cin >> m;
cout << "出列顺序为:";
while (q->next != q) {
for (i = 1; i < m; i++) {
s = q;
q = p;
p = p->next;
}
s->next = p->next;
cout << p->num << " ";
m = p->password;
q = p->next;
delete (p);
p = q;
}
cout << q->num << endl;
return 0;
}
int main() {
List* L;
int n;
cout << "请输入实验人数: ";
cin >> n;
L = create(n);
for (int i = 1; i <= n; i++) {
L->num = i;
L = L->next;
}
output(L);
return 0;
}
这里列出了几个问题和修改方法:
在 create 函数中,输入人员密码时,输出提示信息中应该是 i 而不是 <。
在 output 函数中,应该将 q != NULL 修改为 q->next != q,否则最后一个节点不会被处理。
在 output 函数中,每次删除一个节点后,应该将 p 指向下一个节点,而不是 q->next,因为在下一次循环中需要从 p 开始计数。
在 main 函数中,应该在创建链表时为每个节点的 num 属性赋值。