PTA 算法2-5 返回单链表 list 中第 i 个元素值
PTA 算法2-5 返回单链表 list 中第 i 个元素值
zhangzhang算法2-5 返回单链表 list 中第 i 个元素值
分数 15
作者 陈越
单位 浙江大学
请编写程序,将 n 个整数顺次插入一个初始为空的单链表的表头。对任一给定的位序 i(从 1 开始),输出链表中第 i 个元素的值。
输入格式:
输入首先在第一行给出非负整数 n(≤20);随后一行给出 n 个 int 范围内的正整数,数字间以空格分隔。最后一行给出位序 i,为 int 范围内的非负整数。
输出格式:
在一行中输出链表中第 i 个元素的值。如果这个元素不存在,则输出 -1。
输入样例 1:
1 | 5 |
输出样例 1:
1 | 2 |
输入样例 2:
1 | 5 |
输出样例 2:
1 | -1 |
答案
1 |
|
Summary
1.为什么初始化形参是 LinkList &L而不是LNode &L
在链表的实现中,LinkList 和 LNode 通常是这样定义的:
1 | typedef struct LNode { |
从这个定义可以看出:
LNode是结构体类型,表示链表中的节点本身(如果写成LNode &L,只能修改结点本身,不能改变指向)
LinkList是struct LNode*的别名,表示指向节点的指针
所以在 InitList(LinkList &L) 中:
- 参数类型是
LinkList &L,也就是LNode* &L,表示指向指针的引用 - 这样在函数内部修改
L时(比如分配头节点),才能影响到主函数中实参的指向
而如果写成 LNode &L 则表示指向节点的引用,这不符合链表初始化的需求,因为初始化需要修改的是指针的指向(让它指向新创建的头节点),而不是修改某个节点的内容。
2.实参L传递的是什么
- 实参是
L,传递的是头指针的值(即头节点的地址)


