diff --git a/josephus.c b/josephus.c
new file mode 100644
index 0000000000000000000000000000000000000000..4274556cf5f25ded40b501812a986be62c532203
--- /dev/null
+++ b/josephus.c
@@ -0,0 +1,54 @@
+#include <stdio.h>
+#include <stdlib.h>
+ 
+typedef struct Node {
+    int player_id;
+    struct Node* next;
+} Node;
+ 
+Node* create(Node* node, int n) {
+    Node* first;
+    for(int i=1; i<=n; ++i) {
+        Node* new = (Node*)malloc(sizeof(Node));
+        new->player_id = i;
+        new->next = NULL;
+        if(i == 1) first = new;
+        if(node == NULL) node = new;
+        else {
+            node->next = new;
+            new->next = first;
+        }
+        node = new;
+    }
+    return node;
+}
+ 
+void display(Node* node) {
+    Node* first = node;
+    if(node == NULL) return;
+    do {
+        printf("%d\n", node->player_id);
+        node = node->next;
+    } while(node != first);
+}
+ 
+int main() {
+    int n, k;
+    printf("Masukkan jumlah pemain: "); scanf("%d", &n);
+    printf("Masukkan nilai k: "); scanf("%d", &k);
+ 
+    Node* node = NULL;
+    node = create(node, n);
+    
+    for(int i=0; i<n-1; ++i) {
+        for(int j=0; j<k-1; ++j) {
+            node = node->next;
+        }
+        Node* ptr = node->next->next;
+        free(node->next);
+        node->next = ptr;
+    }
+    printf("%d\n", node->player_id);
+ 
+    return 0;
+}