查找单链表中的结点腾讯面试题

快速找到未知长度单链表中的中间结点

1.普通方法
首先需要遍历一下链表,然后得知链表长度,然后在重新查找中间长度的结点,然后进行输出结点值。算法复杂度为O(n)+O(1/2n)。这里就不进行普通代码演示了。
2.加分方法
运用快慢指针的方法,*fast指针每次走两个结点,slow指针每次走一个结点。当fast指针走到尾部时,*slow指针刚好在单链表中的中间结点。这样算法复杂度就只有O(1/2n)了,效率提高了三倍。代码如下:

status GetMidNode(LinkList L,ElemType *e)
{
    
    
    L.inkList fast,slow;
    slow = fast = L;
    while (fast->next != NUIL)
    {
    
    
        if(fast->next->next !=NULL)
        {
    
    
            fast= fast->next->next;
            slow = slow->next;
        }
       else
       {
    
    
           fast = fast->next;
       }
    }
   *e = mid->data;
    return Ok;
}

猜你喜欢

转载自blog.csdn.net/qq_51344334/article/details/119783105
今日推荐