HUFEOJ正在加载中...

1596: A011单链表:求中间元素

金币值:1 定数:1 时间限制:1.000 s 内存限制:128 M
正确:104 提交:315 正确率:33.02% 命题人:
点赞量:0 收藏量:0 题目类型:程序 知识点: 单链表

题目描述

有一个带头结点的单链表l,设计一个高效的算法求中间位置的元素。如果L有偶数个元素,则中间元素的序号为n/2;如果有奇数个元素,则中间元素的序号为(n+1)/2。算法描述如下:

  1. 设置p1和p2两个指针,初始值都为l;设置n统计p1移到的次数,初始值为0
  2. 如果p2不为空,则跳转到第3步。否则,输出n,算法结束。
  3. p2如果不是尾结点,p2移动2步;否则只能移动1步(移动1步之后p2为空)。p1移动1步,n++。然后返回到第2步。
用c/c++实现该算法,函数头为:int mid(LinkList *l),其中LinkList为单链表结点类型:


typedef struct Node{

    int data;

    struct Node *next;

}LinkList

编写函数void init(LinkList *&l)初始化单链表l;

编写函数void input(LinkList *&l,int n)实现输入n个整数构建单链表l;

编写main函数进行测试。

输入格式

两行:

第1行:一个整数n(0<n<=10000)

第2行:n个整数

输出格式

一个整数

输入样例1    复制

5
3 17 -3 6 2

输出样例1    复制

-3

输入样例2    复制

6
1 2 3 4 5 6

输出样例2    复制

3

提示

p2和p1合称为快慢指针