第二章算法设计题6
题目描述
设计一个算法,通过一趟遍历确定长度为n的单链表中值最大的结点。
代码实现
#pragma once
#include <iostream>
#include<string>
#define MAXSIZE 100
using namespace std;
//单链表的存储结构
typedef struct Lnode
{
int data;//数据域
struct Lnode* next;//指针域
}Lnode, * LinkList;
//头插法创建单链表
void CreateList_H(LinkList& L, int n)
{
//创建带头结点的单链表 并初始化
L = new Lnode;
L->next = NULL;
//创建新的结点
Lnode* p;
for (int i = n - 1; i >= 0; i--)
{
p = new Lnode;
cout << "请输入第" << i + 1 << "个数据" << endl;
cin >> p->data;
p->next = L->next;
L->next = p;
}
}
//打印
void show(LinkList L)
{
//创建一个结点 并指向L的首元结点
Lnode* p;
p = L->next;
//首元结点不为空
while (p)
{
cout << p->data << " ";
//指向下一个结点
p = p->next;
}
cout << endl;
}
//求最大值
int getMax(LinkList L)
{
//创建一个结点指向首元结点
Lnode* pmax=L->next;
Lnode* p = L->next->next;
while (p)
{
//如果p的值大于pmax的值,则重新赋值
if (p->data > pmax->data)
{
pmax = p;
}
p = p->next;
}
return pmax->data;
}
int main()
{
//创建三个链表
LinkList LA;
//创建链表
cout << "前插法逆序输入" << endl;
cout << "请输入LA的元素:" << endl;
CreateList_H(LA, 5);
//打印链表
show(LA);
cout << string(30, '*') << endl;
//求最值
int res = getMax(LA);
cout << "链表中的最大值为:" << res << endl;
system("pause");
return 0;
}