美文网首页
C语言 单向链表&单向循环链表 算法考察题

C语言 单向链表&单向循环链表 算法考察题

作者: skkily | 来源:发表于2020-12-30 20:56 被阅读0次

随机生成10个元素,值为10以内,找到元素值为5的元素在这个下标后面插入一个元素值为11。

我认为这个题目主要分成两个部分

  • 随机生成10个元素值为10以内
  • 在5后面插入11
  • 打印出来

我的想法是

  • 一个单向循环链表来实现第一部分
  • 一个单向链表实现第二部分
  • 打印到终端

链表定义

struct randNum{
    int data;
    struct randNum* next;
};

做第一个要求并初始化随机数组

//初始化随机数组链表
randNum* initRandomArray(){
    randNum *head,*temp,*tail;
    head=tail=temp=new randNum;
    for(int i=1;i<10;i++){
        temp->data=i;
        temp->next=new randNum;
        temp=temp->next;
    }
    temp->data=10;
    temp->next=head;//创建了一个1-10的单向循环链表


    randNum *numHead,*numTemp;//创建了一个单向链表用于存储随机抽取的数
    numHead=numTemp=new randNum;

    tail=temp;
    temp=head;
    int num=10;
    int move=rand()%num;
    while(temp!=temp->next){
        if(!move){//如果移动步数为0则将这个元素取出
            num--;
            move=rand()%num;//移动的最大步数会随着元素个数的减少而减少
            tail->next=temp->next;
            numTemp->data=temp->data;
            delete(temp);
            temp=tail->next;
            numTemp->next=new randNum;
            numTemp=numTemp->next;
            continue;
        }
        tail=temp;
        temp=temp->next;
        move--;
    }
    numTemp->data=temp->data;
    numTemp->next=new randNum;//返回了个排好序的单项链表
    delete(temp);//做好最后的收尾
    return numHead;
}

实现5后插入11的要求并打印

void cal(){
    randNum* head=initRandomArray(),*temp,*tail;
    tail=head;
    temp=tail->next;
    while(temp->next!=NULL){//实现5后插入11的要求
        if(tail->data==5){
            tail->next=new randNum;
            tail->next->data=11;
            tail->next->next=temp;
            temp=temp->next;
            break;
        }
        tail=temp;
        temp=temp->next;
    }

    temp=head;
    while(temp->next!=NULL){//循环打印出来
        cout<<"-"<<temp->data<<"-";
        temp=temp->next;
    }
    cout<<endl;
}

main函数

int main(){
    srand(time(NULL));//初始化一下随机函数,不然rand()得出的结果相等
    cal();
    return 0;
}
执行情况

相关文章

网友评论

      本文标题:C语言 单向链表&单向循环链表 算法考察题

      本文链接:https://www.haomeiwen.com/subject/pmhkoktx.html