设L为不带表头的单链表的头指针,数据元素为整数,写出一个函数,求出链表中的最大整数
时间: 2023-05-21 09:04:55 浏览: 119
以下是求单链表最大整数的函数实现:
```c++
int maxInList(Node* L) {
if (L == nullptr) {
// 链表为空
return INT_MIN;
}
int maxNum = L->data;
Node* pNode = L->next;
while (pNode != nullptr) {
if (pNode->data > maxNum) {
maxNum = pNode->data;
}
pNode = pNode->next;
}
return maxNum;
}
```
该函数首先判断链表是否为空,若是,则返回 `INT_MIN` 表示最大整数不存在。否则,将第一个数据元素的值赋给 `maxNum`,遍历整个链表,每次比较当前节点的数据元素与 `maxNum` 的大小,若当前节点的数据元素较大,则更新 `maxNum`。最后返回 `maxNum` 即可。
相关问题
设带表头结点单链表的数据类型为整数,表头结点指针为head,编写算法统计链表中数据域值为正整数的结点个数占结点总数的比例,并返回该值,如果链表为空则返回-1。该算法的C 语言函数原型为: double Ratio(LinkList *head);
为了实现这个`Ratio`函数,你可以按照以下步骤来进行:
1. 首先,检查链表是否为空。如果`head`为`NULL`,表示链表为空,直接返回-1。
```c
if (head == NULL) {
return -1;
}
```
2. 初始化两个计数器,一个用于正整数结点(positive_count),另一个用于总结点数(total_count)。将`total_count`初始化为1,因为第一个节点一定存在,然后遍历链表。
```c
int positive_count = 1; // 结点1假设为正数
int total_count = 1;
LinkList *current = head;
while (current != NULL) {
// ...
}
```
3. 在遍历过程中,检查当前节点的值。如果是正整数,则`positive_count`加一;然后移动到下一个节点。
```c
if (current->data > 0) {
positive_count++;
}
current = current->next;
```
4. 当链表遍历完成后,计算比例并将其转换为浮点型,除以`total_count`。由于可能除以0的情况(如果链表只包含负数),需要再次检查`total_count`。
```c
if (total_count == 0) {
return -1;
} else {
double ratio = (double)positive_count / total_count;
return ratio;
}
```
5. 将整个函数组合起来:
```c
double Ratio(LinkList *head) {
if (head == NULL) {
return -1;
}
int positive_count = 1;
int total_count = 1;
LinkList *current = head;
while (current != NULL) {
if (current->data > 0) {
positive_count++;
}
current = current->next;
total_count++;
}
if (total_count == 0) {
return -1;
} else {
return (double)positive_count / total_count;
}
}
```
已知f为单链表的表头指针,链表中存储的都是整型数据,试写出实现下列运算的递归算法 求链表中的最大整数 求链表的结点个数
对于单链表,递归算法可以按照以下步骤来实现:
1. **求链表中的最大整数** (Max Value in Linked List)
```python
def max_value(head):
# 基本情况:空链表或只有一个节点
if head is None or head.next is None:
return head.value if head else float('-inf') # 如果是None则返回负无穷大
# 递归情况:找到当前节点的最大值和剩余部分的最大值
else:
current_max = max(head.value, max_value(head.next))
return current_max
```
这个函数首先检查是否到达链表末尾,然后比较当前节点的值与剩余部分的最大值。
2. **求链表的结点个数** (Count Nodes in a Linked List)
```python
def count_nodes(head):
# 基本情况:空链表
if head is None:
return 0
# 递归情况:当前节点加上剩余部分的节点数
else:
return 1 + count_nodes(head.next)
```
这个函数同样从头开始,如果遇到`head`为空,则表示链表结束,返回0;否则,返回1(当前节点)加上递归计算剩余部分的节点数。
阅读全文