求链表最小值
Description
请使用递归的方法,求出int链表中最小值。
Input
第1行1个整数,表示链表中元素个数N。
第2行N个整数,为链表中元素值。
Output
1个整数,为链表中最小值。
Sample Input 1
5
1 2 3 4 5
Sample Output 1
1
#include <iostream>
using namespace std;
struct ListNode {
int val;
ListNode* next;
ListNode(int x) : val(x), next(nullptr) {}
};
int findMin(ListNode* head)
{
if (head == nullptr) {
return 32767;//INT_MAX
}
int restMin = findMin(head->next);//一层层遍历下去,直到最后一个指针
//比较的是递归返回的过程中 restMin和当前结点所存储的head->val的值
//如果restMin>head->val,也就是递归上来的值大,那么就返回当前结点的值
//反之亦然
if (head->val < restMin) //比较当前节点值和剩余部分的最小值
{
return head->val;
} else {
return restMin;
}
}
int main() {
int N;
cin >> N;
ListNode* head = nullptr;
ListNode* current = nullptr;
for (int i = 0; i < N; ++i)
{
int val;
cin >> val;
if (head == nullptr) //头结点
{
head = new ListNode(val);
current = head;
}
else //非头结点存放
{
current->next = new ListNode(val);
current = current->next;
}
}
cout << findMin(head) << endl;
while (head != nullptr) //释放内存空间
{
ListNode* temp = head;
head = head->next;
delete temp;
}
return 0;
}