分析: 这是一个单链表算法题,题中说要在不改变链表本身的前提下,设计一个尽可能高效的算法,说明时间复杂度、空间复杂度都要尽可能地高效,常数也要尽可能小。
思路: 设置两个指针p和q,指p针在指针q后k个位置上,当q遍历至尾部时,p刚好遍历到了倒数第k个位置上。
图解如下:
在这里插入图片描述
代码实现如下:

 typedef struct LNode{
        int data;
        LNode *next;
   }LinkList,LNode;
   int search(LinkList *list,int k)
{
        LNode *p=list->next;
        LNode *q=list->next;//使p、q初始时指向头结点
        int count=0;
        while(q!=NULL)
        {
                if(count<k)
                {
                        count++;
                }
                else
                {
                        p=p->next;//当count值大于时,指针p开始和q同步移动
                }
                q=q->next;
        }
        if(count<k)
        {
                return 0;//查找失败
        }else
        {
                cout<<p->data;//查找成功则返回data指;
                return 1;
        }
}      
Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐