美文网首页
3.单链表反向查找

3.单链表反向查找

作者: 秦萍健 | 来源:发表于2017-08-22 11:20 被阅读39次

题目:已知一个带有附加头节点的单链表,节点结构为(data,link)。假设该链表只给出了头指针first。在不改变链表的前提下,请设计一个尽可能高效的算法,查找链表中倒数第i个位置上的节点,若查找成功,算法返回该节点的地址;否则返回NULL。

分析:用一个指针p指向链表的首节点,另一个指针q找到链表正数第i个节点,然后平移指针p和指针q,当指针q指向链表最后一个节点时,指针p恰好指向链表倒数第i个节点。算法思路如下图(查找倒数第二个节点)
      

代码如下:

LinkNode<T>* List<T>::oppoLocate(int i)//返回表中倒数第i个元素的地址
{
    if(i<0)    return NULL;            //i不合理
    LinkNode<T>* p = first->link;     //p指向首节点
    LinkNode<T>* q = Locate(i);       //q指向正数第i个节点
    while(q->link!=NULL)              //偱链至q指向最后一个节点
    {
        p = p->link;
        q = q->link;
    }
    return p;                        //返回p所指向的倒数第i个结点地址
};


LinkNode<T>* List<T>::Locate(int i)    //返回链表中正数第i个元素的地址
{
    if(i<0)    return NULL;            //i不合理
    LinkNode<T>* current = first;
    int k = 0;
    while(current!=NULL && k<i)        //偱链找第i个结点
    {
        current=current->link;
        k++;
    }
    return current;                    //返回第i个结点地址,若返回NULL,表示i值太大
};

//时间复杂度为 O(n),只需遍历一次。

相关文章

  • 3.单链表反向查找

    题目:已知一个带有附加头节点的单链表,节点结构为(data,link)。假设该链表只给出了头指针first。在不改...

  • 数据结构-单链表学习目录

    1.单链表的基本操作 2.求单链表的长度 3.判断单链表是否为空 4.查找单链表中倒数第K个结点 5.单链表的反转...

  • 单向链表算法

    单向链表 反转单向链表 单链表查找倒数第k个节点 单链表递归倒序打印 单链表排序 单链表删除重复节点

  • 链表相关

    总结一下链表相关的操作 单链表节点的定义 实现单向链表的反向 删除单链表的所有节点

  • 线性表的链式存储-单链表

    单链表操作 [x] 单链表的创建(尾插法、头插法) [x] 单链表的查找操作 [x] 单链表的删除操作 [x] 单...

  • 算法面经--双向链表

    双向链表 一、与单链表的对比凸显优势 ① 单向链表,查找的方向只能是一个方向,而双向链表可以向前或者向后查找。 ②...

  • 单链表常见面试题

    统计单链表中有效节点的个数 查找单链表中的倒数第k个节点(Sina) 单链表的反转(Tencent) 从尾到头打印...

  • 链表

    链表 缺点:查找复杂有点:定点删除/插入元素 单链表 双向链表 循环链表 双向循环链表 数组与链表的区别 数据存储...

  • 单链表算法

    本章涉及知识点:1、数组的优点和缺点2、链表的定义和分类3、单链表的优点和缺点4、单链表的查找5、单链表的更新6、...

  • 链表-链表的建立以及增删操作

    1.单链表 2.单向循环链表 3.双链表

网友评论

      本文标题:3.单链表反向查找

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