Josephus Problem

July 8th, 2014

linked list

C

1
2
3
4
5
6
7
8
struct node {
  item item;
  struct node* next;
}

struct node* head = malloc(sizeof(*head));
head->item = 1;
head->next = head;

C full-edition

josephus_problem.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#include <stdio.h>
#include <stdlib.h>

typedef struct node* link;
struct node {
  int item;
  link  next;
};

int main(int argc, char *argv[]) {
  int i, N = atoi(argv[1]), M = atoi(argv[2]);
  link head = malloc(sizeof(struct node)), x;
  head->item = 1;
  head->next = head;

  for (i = 2, x = head; i <= N; i++) {
    x = (x->next = malloc(sizeof *x));
    x->item = i;
  }
  x->next = head;

  while(x != x->next) {
    for (i = 1; i < M; i++) x = x->next;
    printf("%d ", x->next->item);
    x->next = x->next->next;
  }

  printf("\nLeft: %d\n", x->item);
}

Javascript

construct function

1
2
3
4
5
6
7
function Node(item, next) {
  this.item = item;
  this.next = next;
}

var head = new Node(1);
head.next = head;

Python

1
2
3
4
5
6
7
8
class Node():
  def __init__(self, item, next):
    self.item = item
    self.next = mext
  }

head = Node(1)
head.next = head

Java

1
2
3
4
5
6
7
8
class Node {
  int item;
  Node next;
}

Node head = new Node();
head.item = 1;
head.next = head;

Comments