一道C#循环链表的题,没想出来

对某电文(字符串)进行加密,形成密码文(字符串)。假设原文为C1C2C3....Cn,加密后产生的密文为S1S2S3.....Sn.首先读入一个正整数key(key>1)作为加密钥匙,并将密文字符位置安顺时针方向连成一个环。加密时从S1位置起顺时针方向计数,当数到第key个字符位置时,将原文中的字符C1放入该密文字符位置,同时从环中除去该字符位置。接着,从环中下一个字符位置起继续计数,当再次数到第K 个字符位置时,将原文中的C2放入其中并从环中除去该字符位置,依此类推,直至n个原文字符全部放入密文环中。由此产生的S1S2S3...Sn即为原文的密文。

(1)动态输入原文的内容。
(2)动态输入key的值,对于每一个key,在屏幕上产生原文内容及密文内容。
提示:控制台或者窗口实现
请大神指点!

 #include <stdio.h>
   #include <string.h>
   #include <malloc.h>

    typedef struct node
    {
        char ch;
        struct node *forward; /*链接下一节点*/
        struct node *backward; /*链接前一节点*/
    } CODE;

    char *decode(char *ocode, int key)
    {
        char *ncode;
        int length, count,i;
        CODE *loop , *p;
        length = strlen(ocode);
        loop= (CODE*)malloc(length*sizeof(CODE)); /*动态分配密文环*/
        for(i=0;i<length-1;i++)
        {
            loop[i].forward = &loop[i+1];
            loop[i].backward =&loop[i-1];

        }     
        loop[0].backward =&loop[length-1];
        loop[0].forward = &loop[1];
        loop[length-1].forward = loop;
        loop[length-1].backward = &loop[length-2];

        for(p=loop, i=0; i<length;i++)
        {
            /*产生密文链表*/
            for(count=1;count<key; count++)
             p= p->forward;
             p->ch =*ocode++;
             p->backward->forward =p->forward;
             p->forward->backward = p->backward;
             p = p->forward;
         }
         ncode = (char*)malloc((length+1)*sizeof(char));
         for(i=0;i<length;i++)

             ncode[i] =loop[i].ch;
             ncode[length] = '\0';
             return ncode;
   }         

    void main()
    {
        char ocode[256];
        int key, num=0;
        printf("输入原文字符串: ");
        while(num<255&&(ocode[num++]=getchar())!='\n');
        ocode[(num==255)?num:num-1] ='\0';
        do 
         {
             printf("输入加密密钥:");
             scanf("%d",&key);

         }   while(key<=1);
         printf("电文的密码是: %s\n",decode(ocode,key));  

    }