题目:查找链表最后节点 struct node {int ch; struct node * next;}; 定义函数遍历链表,返回链表上最后一个节点的数据成员ch的值。 函数接口定义: 在这里描述函数接口。例如: int findnode(struct node *head); head是链表的头指针,返回值是最后节点数据成员ch的值。
时间: 2024-02-23 12:03:21 浏览: 376
根据题目描述,本题需要遍历链表,找到链表的最后一个节点,并返回其数据成员 `ch` 的值。下面是一个可能的解法,函数接口定义如下:
```c
int find_last_node(struct node *head);
```
其中,`head` 是链表的头指针,函数返回值是最后节点数据成员 `ch` 的值。
下面给出完整的代码实现:
```c
#include <stdio.h>
#include <stdlib.h>
struct node {
int ch;
struct node *next;
};
int find_last_node(struct node *head) {
int ch = -1; // 记录最后一个节点的数据成员ch的值
struct node *p = head;
while (p != NULL) {
ch = p->ch;
p = p->next;
}
return ch;
}
int main() {
// 构造一个简单的链表
struct node *n1 = (struct node*)malloc(sizeof(struct node));
struct node *n2 = (struct node*)malloc(sizeof(struct node));
struct node *n3 = (struct node*)malloc(sizeof(struct node));
n1->ch = 1; n1->next = n2;
n2->ch = 2; n2->next = n3;
n3->ch = 3; n3->next = NULL;
// 调用函数查找最后一个节点的数据成员ch的值
int last_ch = find_last_node(n1);
printf("Last node's ch: %d\n", last_ch);
// 释放链表结点占用的内存
free(n1); free(n2); free(n3);
return 0;
}
```
代码运行结果为:
```
Last node's ch: 3
```
在上面的代码中,我们定义了 `find_last_node` 函数,用来遍历链表并返回最后一个节点的数据成员 `ch` 的值。在函数内部,我们使用了一个指针变量 `p` 来遍历链表,每次遍历到一个节点时,将其数据成员 `ch` 的值赋给 `ch` 变量,并将指针 `p` 移动到下一个节点。当 `p` 指向 `NULL` 时,说明已经遍历到链表的最后一个节点,此时 `ch` 变量记录的就是最后一个节点的数据成员 `ch` 的值。最后,函数返回 `ch` 变量的值即可。
在主函数中,我们构造了一个简单的链表,并调用 `find_last_node` 函数查找最后一个节点的数据成员 `ch` 的值。注意,在使用完链表后,我们需要手动释放链表结点占用的内存,以避免内存泄漏。
阅读全文