c语言设计一个算法,通过一趟遍历确定长度为n的单链表中值最大的节点,返回该节点的数据域。 输入样例: n 12 链表值:5 6 7 3 6 8 9 11 13 4 2 0 输出:13
时间: 2024-09-11 20:17:32 浏览: 94
循环单链表中值为X节点删除方法
要设计一个C语言算法来找到长度为n的单链表中值最大的节点,你可以使用迭代或递归的方式。这里给出一种迭代的方法:
首先,假设我们有一个结构体`ListNode`来表示链表节点,包含一个整数值`val`和指向下一个节点的指针`next`。
```c
typedef struct ListNode {
int val;
struct ListNode* next;
} ListNode;
```
然后我们可以创建一个函数`findMaxNode(int n, ListNode* head)`,它接受链表的长度`n`和头结点`head`作为输入参数:
```c
ListNode* findMaxNode(int n, ListNode* head) {
if (head == NULL || n <= 0) {
return NULL; // 输入无效,直接返回空
}
ListNode* maxNode = head; // 初始化最大节点为头节点
int currentMax = head->val; // 当前最大值
for (int i = 1; i < n; ++i) { // 遍历链表直到n个节点
if (currentMax < head->val) { // 如果当前节点的值大于当前最大值
maxNode = head; // 更新最大节点地址
currentMax = head->val; // 更新最大值
}
head = head->next; // 移动到下一个节点
}
return maxNode; // 返回含有最大值的节点
}
```
在这个算法中,我们逐个比较每个节点的值,如果发现新的最大值就更新最大节点。最后返回的就是链表中值最大的节点。
输入样例:
n = 12
链表值:5 6 7 3 6 8 9 11 13 4 2 0
调用`findMaxNode(12, &head);`,其中`head`是链表的头节点,结果会返回值为13的节点。
阅读全文