1596: A011单链表:求中间元素
金币值:1
定数:1
时间限制:1.000 s
内存限制:128 M
正确:104
提交:315
正确率:33.02% 命题人:
题目描述
有一个带头结点的单链表l,设计一个高效的算法求中间位置的元素。如果L有偶数个元素,则中间元素的序号为n/2;如果有奇数个元素,则中间元素的序号为(n+1)/2。算法描述如下:
- 设置p1和p2两个指针,初始值都为l;设置n统计p1移到的次数,初始值为0
- 如果p2不为空,则跳转到第3步。否则,输出n,算法结束。
- p2如果不是尾结点,p2移动2步;否则只能移动1步(移动1步之后p2为空)。p1移动1步,n++。然后返回到第2步。
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合称为快慢指针