您的位置:首页 > 其它

查找单链表中倒数第k个元素

2009-09-09 11:10 441 查看
题目表述:



设计一个算法,找出一个无环的单链表里面倒数第k个元素,速度要快。



算法实现:



实现中的注释已经解释了算法的大概思想。



struct node{
    int key;
    node* next;
};
typedef node* List;
int findLastKthElement(List list, int k)
{
    //遍历整个链表,
    //声明一个临时指针指向头节点
    //当遍历过元素个数小于K的时候,继续遍历
    //当遍历过的元素个数等于k的时候,临时指针指向下一个元素,然后继续遍历
    //当遍历到链表尾部的时候,则临时指针指向的节点就为倒数第k个元素。
    if (list == NULL || k <= 0)
    {
        return -1;   //查找失败。
    }
    List p = list;
    List tempList = list;
    int num = 0;
    while(p)
    {
        if (num < k)
        {
            num++;
        }
        else if (num == k)
        {
            tempList = tempList->next;
        }
        p = p->next;
    }
    
    if (num < k)
    {
        return -1; //查找倒数第k个元素失败
    }
    return  tempList->key;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐