约瑟夫问题 循环列表 输出 存活数字

#include <iostream>
#include <string>
using namespace std;

typedef struct LNode {
    int i;
    struct LNode *next;   
}LNode, *LinkList;

void InitList(LinkList& L);
void GetList(LinkList& L);
void DeleteList(LinkList& L);
void PrintList(LinkList& L);

int main() {
    LinkList L;
    InitList(L);
    GetList(L);
    DeleteList(L);
    PrintList(L);
    return 0;
}



/*初始化链表函数*/
void InitList(LinkList& L)
{
    L = new LNode;
    L->next = L;
}

/*链表赋值函数*/
void GetList(LinkList& L) {
    LNode* p = L;
    int j=1;
    while (j<42) {
        LNode* q = new LNode;
        q->i = j;
        q->next = NULL;
        p->next = q;
        p = p->next;
        j++;
    }
    p->next = L;
}

/*删除函数*/
void DeleteList(LinkList& L) {
    LNode* p = L;
    int j = 41, i = 1;
    while (j >= 3) {
        if (i%3==0) {
            LNode* q = new LNode;
            q = p->next;
            p->next = q->next;
            delete q;
            i++;
            j--;
        }
        else
        {
            p = p->next;
            i++;
        }
    }
}

/*输出函数*/
void PrintList(LinkList& L) {
    LNode* t =new LNode;
    while (t->next != L) {
         cout << "存活数字为:" << t->i << endl;
        t = t->next;
    }
}



img

不知道什么地方的问题 求问