代码改变世界

面试题5:获取单链表指定位置的元素

2016-03-27 22:55  Keiven_LY  阅读(1738)  评论(0编辑  收藏  举报

在线性表的顺序存储结构中,我们要计算任意一个元素的存储位置是很容易的。因为线性表的顺序存储就是个数组嘛,比如要获取第5个元素,可以直接a[5]就行了。但在单链表中,由于第i个元素到底在哪是没办法一开始就知道,必须得从头开始找。

基本思路:

  1. 声明一个结点p指向链表头结点,初始化i从0开始;
  2. 当i < pos时,就遍历链表,让p的指针向后移动,不断指向下一结点,i累加1;
  3. 若到链表末尾P为空,则说明第pos个元素不存在;
  4. 否则査找成功,返回结点p的数据。

功能函数:

/*     获取指定位置的元素    */
int GetElem(Node *head, int pos)
{
    Node *p = head; //声明一个结点p,指向头结点

    int i = 0;

    while(p && i < pos)   
    {
        p = p->next;
        ++i;
    }

    if(!p || i > pos)
    {
        cout << "" << pos << "个元素不存在" << endl;
    }
    int getData = p->data;
    return getData;
}