创建循环单链表写约瑟夫环问题,一直报错0xDDDDDDDD
源代码
#include
using namespace std;
struct Node//结点类型
{
int data; //数据域
Node* next; //指针域
};
int main()
{
int num, k;//n为人数,k为报数到几出列
cout << "请输入参加游戏的人数:";
cin >> num;
cout << "每报数到几出列:";
cin >> k;
struct Node* H = NULL, * r = NULL;//H是头指针,r是尾指针,都先赋初值为空
struct Node* p, * q;//用两个指针方便后面删除操作,使q一直是p的前驱
//创建一个无头结点的循环单链表,从尾部插入n个节点
for (int i = 1; i <= num; i++)
{
p = (struct Node*)malloc(sizeof(struct Node));
p->data = i;
if (H == NULL)//对于第一个节点的操作
H = r = p;//使头尾指针都指向第一个节点,同时也固定了头指针
else//对于其他节点的操作
{
p->next = H;//新增节点指向头指针,实现循环
r->next = p;
r = p;//新表尾替换旧表尾
}
}
p = H; q = r;//p指向第一个节点,q指向表尾,q一直做p前驱
int count = 0;//记录出列人数
while (count != num)//count=num代表所有人都出列
{
for (int j = 1; j <= k;)
{
if (j != k)
{
q = q->next;
p = p->next;
j++;
}
if (j == k)//报数到k删除节点
{
count++;
q->next = p->next;
cout << "第" << count << "个出列的人是:" << p->data << endl;
free(p);//删除p
p = q->next;//让p重新指向q的后继
j = 1;
}
}
}
return 0;
}
报错: