双指针解决约瑟夫环问题-线性表-链表

// test8.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。

约瑟夫环//

#include <iostream>

#include<stdio.h>

int num = 7;

typedef struct Node

{ int data;

struct Node* PL,*PR;//PL 指向上一个 PR 指向下一个

}Node, * Hnode;

int main() {

   //构建

   int m = 0, sign = 0;//标志位

Node *H = NULL;
H = (Node*)malloc(sizeof(Node));
Node *p = NULL;
p = (Node*)malloc(sizeof(Node));
p->PL = H;
p->PR = NULL;
p->data = 1;

H->PR = p;
H->PL = NULL;
H->data = 0;
Node* q = NULL;

//输入值 为后续输出数值准备
while (p->data < num) {
q = (Node*)malloc(sizeof(Node));
p->PR = q;
q->PL = p;
q->PR = NULL;
q->data = m+2;
p = q;
m++;
}
p->PR = H->PR;
p = H;
m = 0;
//输出
while (1) {
p = p->PR;
sign++;
if (sign == 3) {
//断开指针 将此时指针位置的上一个指向本位置的下一个 将本位置的下一个指向本位置的上一个
p->PL->PR = p->PR;
p->PR->PL = p->PL;
//输出
printf("%d ",p->data);
m++;
p = p->PR;
sign = 1;
}
//因为输出一次 m加一 所以当 m == num时 输出结束 循环完毕
if (m>=num ) {
break;
}
}
return 0;

}

posted on 2021-12-12 10:57  肆莫耀  阅读(76)  评论(0)    收藏  举报