📜  在链表中查找最大和第二大的值(1)

📅  最后修改于: 2023-12-03 15:37:47.340000             🧑  作者: Mango

在链表中查找最大和第二大的值

在一个单向链表中,查找出最大值和第二大值是一个常见问题。这个问题可以通过遍历整个链表并记录最大值和第二大值来解决。

算法设计

以下是查找最大和第二大值的算法设计步骤:

  1. 初始化最大值为链表的第一个节点的值,第二大值为链表的第二个节点的值。
  2. 遍历链表的每个节点,如果节点的值大于当前最大值,则将当前最大值和第二大值分别更新为该节点的值和当前最大值的值。如果节点的值小于等于最大值但大于等于第二大值,则将第二大值更新为该节点的值。
  3. 遍历完成后,最大值和第二大值即为所求。
代码实现

以下是在C++中实现查找最大和第二大的值的代码片段:

int first_max = INT_MIN; // 初始化最大值为最小整数值
int second_max = INT_MIN; // 初始化第二大值为最小整数值

Node* current = head; // 从链表的头结点开始遍历

while (current != nullptr) {
    if (current->data > first_max) {
        second_max = first_max;
        first_max = current->data;
    } else if (current->data > second_max) {
        second_max = current->data;
    }
    current = current->next;
}
时间复杂度

时间复杂度是 $O(n)$,因为需要遍历整个链表。