双指针解决约瑟夫环问题-线性表-链表
约瑟夫环//
#include <iostream>
#include<stdio.h>
int num = 7;
typedef struct Node
{ int data;
struct Node* PL,*PR;//PL 指向上一个 PR 指向下一个
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;
浙公网安备 33010602011771号