【正确答案】要寻找到单链表的中间结点,最容易想到的方法是首先求解单链表的长度,记为length,然后遍历length/2的距离即可,但是此种方法需要遍历两次链表,即第一次遍历求解单链表的长度,第二次遍历根据索引获取中间结点。
如果是双向链表,可以首尾并行进行寻找,利用两个指针,一个从头到尾遍历,另一个从尾到头遍历,当两个指针相遇的时候,就找到了中间结点。以此思想为基础,如果是单链表,也可以采用双指针的方式来实现中间结点的快速查找。
具体而言,第一步,定义两个指针,二者同时从链表头开始遍历。第二步,两个指针每次走的步数不一样,其中,快指针一次走2步,慢指针一次走1步。第三步,由于快慢指针每次所走的步数不一样,所以,快指针会先到达链表尾部,而慢指针则恰好到达链表中部。(快指针走到链表尾部时,当链表长度为奇数时,慢指针指向的即是链表中间指针,当链表长度为偶数时,慢指针指向的结点和慢指针指向结点的下一个结点都是链表的中间结点。)
【答案解析】