C++:找寻密码(用单链表实现)

题目如下:
找寻密码
这是一个密码问题,密码由10个小写字母构成,这10个密码均从所有的小写字母中按规律查找,其规律是:所有的字母按字典序从'a'~'z'排列从头开始进行1到n报数,凡是报到n的字母出列,剩下的向小序号方向靠拢,再从头开始进行1到(n+1)报数,凡报到(n+1)的出列,剩下的向小序号方向靠拢,以后依次从头开始轮流进行1到n、1到(n+1)报数,直到得到出列的字母有10个为止,这些字母就是所需要的密码。

输入格式:
输入奇数次报数的出列序号n。

输出格式:
输出10个字母密码

输入样例:
在这里给出一组输入。例如:

5
输出样例:
在这里给出相应的输出。例如:

ejotygnvfm
我的思路:
首先用创建一个单链表,然后用for循环找寻要找的那个数存入数组中,用while作为外层循环直到找寻到10个数。


#include<bits/stdc++.h>
using namespace std;
typedef struct Lnode
{
    int a;
    struct Lnode *next;
}Lnode,*LinkList;
void initList(LinkList &L)
{
    L=new Lnode;
    L->next=NULL;
    LinkList temp;
    temp=L;
    for(int i=49;i<=74;i++)
    {
        LinkList p=new Lnode;
        p->a=i;
        p->next=NULL;
        temp->next=p;
        temp=p;
    }
}
void ListDelete(LinkList &L,int n)
{
    LinkList p=L;
    int j=0;
    while((p->next)&&(j<n-1))
        {
            p=p->next;
            ++j;
        }
    LinkList q;
    q=p->next;
    p->next=q->next;
    delete q;    
 } 
void show(int password[])
{
    for(int i=0;i<10;i++)
        printf("%c",password[i]+48);
 } 
int main()
{
    LinkList L,temp;
    initList(L);
    int password[10],j=0;
    int n;
    cin>>n;
    while(j<10)
    {
        temp=L->next;
        for(int i=0;i<n;i++)
        {
            temp=temp->next;
            if(i==n-2){
                password[j]=temp->a;
                ListDelete(L,n-2);
                j++;
            }
            if(temp->next==NULL)
                break;
        }
        for(int i=0;i<n+1;i++)
        {
            temp=temp->next;
            if(i==n-1){
                password[j]=temp->a;
                ListDelete(L,n-1);
                j++;
            }
            if(temp->next==NULL)
                break;            
        }
     }
     show(password);
    return 0;
}

但是答案始终不对,请问这是为什么啊?

img

用链表就是杀鸡用牛刀了吧......用个结构数组就好了,就26个元素,每个元素标志一个是否使用的状态

第一个for循环执行后 第二个for循环执行前应该也要重置下temp为首结点 即63行后面应该加一行52行一样的代码 temp = L->next; 因为第一个for循环执行过后 temp就指向的已经不是首节点了

您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632