对于链表中取某个节点元素

来源:3-7 链表编码实战(五)

qq_残缺的悬念_04419689

2016-12-20 16:49

取元素时取i=m_iLength不就是取最后一个节点的元素吗,为什么不可以?

写回答 关注

3回答

  • 黑巫师0
    2016-12-26 12:03:00

    首先需要明确的是,链表和数组不同,链表不能通过下标 i 来直接获取到 i 所对应的结点,而是先要定义一个计数器在循环中数数,通过结点的next一直遍历到第 i 个结点,即当计数器的值等于 i 时。因此只能通过从头结点开始遍历的方式来找第 i 个结点 ,而不能通过 i 来直接获取第 i 个结点。说的有点啰嗦。。。希望对你有帮助~

  • Jathy
    2016-12-21 17:50:10
    bool List::GetElem(int i, Node *pNode)
    {
    if(i < 0 || i >= m_iLength)
        return false;
    
    Node *currentNode = m_pList;
    for(int k = 0; k < i; k++)
    {
    currentNode = currentNode->next;
    }
    
    pNode->data = currentNode->data;
    return true;
    }

    当i=m_iLength时,currenNode已经为尾节点指向NULL,而不是指向最后元素的节点;

    所以要去取最后一个元素的应该是 i = m_iLength-1;

    if(i < 0 || i >= m_iLength)    
        return false;

    所以这里判断i是否是有效值,就应不包括等号;

    ^.^Y

  • Jathy
    2016-12-20 20:43:22

    链表中每一个节点都是通过上一个节点的next指向,不同于数组通过下标就可以取得相应元素!

    所以取元素时i=m_iLength并不能取得最后一元素。

    希望帮到你!^.^

    qq_残缺的...

    我说的是基于for循环时的i=iLength,是指针的循环,并不存在是不是数组寻址的问题,还是谢谢你。讨论的是视频中的代码

    2016-12-21 14:58:12

    共 1 条回复 >

数据结构探险之线性表篇

线性表的主体顺序表和链表,让学员能够将知识融会贯通学以致用

57563 学习 · 257 问题

查看课程

相似问题