题目
以下为单链表[1]按序号的查找运算,分析算法,请在横线处填上正确的语句。LNode *find_LinkList( LinkList L,int i){ if (i<=0) return NULL; p=L->next; j=1; while( ____&& ____ ) { p=p->next; j++; } if(i==j) return p; else return NULL;}
以下为单链表[1]按序号的查找运算,分析算法,请在横线处填上正确的语句。 LNode *find_LinkList( LinkList L,int i) { if (i<=0) return NULL; p=L->next; j=1; while( ____&& ____ ) { p=p->next; j++; } if(i==j) return p; else return NULL; }
题目解答
答案
本题考察单链表按序号查找的实现。核心逻辑为:
1. 初始化 `p = L->next`,`j = 1`。
2. 循环条件为 `p != NULL && j < i`,确保未超出链表范围且未达到目标序号。
3. 若循环结束时 $j == i$,返回 `p`;否则返回 `NULL`。
完整代码如下:
```c
LNode* find_LinkList(LinkList L, int i) {
if (i <= 0) return NULL;
LNode* p = L->next;
int j = 1;
while (p != NULL && j < i) {
p = p->next;
j++;
}
return (i == j) ? p : NULL;
}
```
解析
本题考察单链表按序号查找的实现。解题思路如下:
- 首先,函数接收一个链表头指针
L和一个整数i,i表示要查找的元素的序号。 - 进行边界条件判断,如果
i <= 0,说明序号不合法,直接返回NULL。 - 初始化指针
p指向链表的第一个数据节点,即L->next,同时初始化计数器j为 1,表示当前指向的是第 1 个节点。 - 进入
while循环,循环的目的是让指针p向后移动,直到找到第i个节点或者遍历完整个链表。循环需要满足两个条件:- 条件一:
p != NULL,这是为了确保指针p没有超出链表的范围,如果p为NULL,说明已经遍历到链表末尾,不能再继续向后移动。 - 条件二:
j < i,这是为了确保还没有找到第i个节点,当j等于i时,说明已经找到了目标节点,不需要再继续循环。
- 条件一:
- 在每次循环中,将指针
p向后移动一个节点,即p = p->next,同时计数器j加 1,表示当前指向的节点序号加 1。 - 循环结束后,判断
i是否等于j,如果相等,说明找到了第i个节点,返回指针p;否则,说明没有找到第i个节点,返回NULL。