单链表中一趟遍历找出值最大节点

/*
这个题就没什么算法了,直接利用两个指针,指向两个
节点,p1 p2,p1指向两者较大的,最后p1所指向的就是
表中值最大的节点
*/

#include <iostream>
using namespace std;
//*****************结构体********************
typedef struct Node 
{
 int elem;
 struct Node* Next;
}Node;
//*****************初始化表*******************
void InitLink(Node* &L)
{
 L = new Node;
 L->Next = NULL;
}
//*****************创建表**********************
void CreatLink(Node* L)
{
 cout<<"请输入表数据,以-1结束输入:"<<endl;
 Node* p = L;
 Node* s = new Node;
 
 while(cin>>s->elem,s->elem != -1)
 {
  s->Next = NULL;
  p->Next = s;
  p = s;
  s = new Node;
 }
 delete s;
}
//*****************打印表************************
void Print(Node* L)
{
 Node* p = L->Next;
 while(p)
 {
  cout<<p->elem<<" ";
  p = p->Next;
 }
 cout<<endl;
}
//*****************查找最大元素值*******************
Node* SearchMax(Node* L)
{
 Node* p1;
 Node* p2;
 p1 = L->Next;
 p2 = p1->Next;
 while(p2)
 {
  if(p2->elem > p1->elem)
  {
   p1 = p2;
   p2 = p2->Next;
  }
  else
  {
   p2 = p2->Next;
  }
 }
 return p1;
}
int main()
{
 Node* L;
 InitLink(L);
 CreatLink(L);
 cout<<"链表为:";
 Print(L);
 Node* p = SearchMax(L);
 cout<<"表中最大值为:";
 cout<<p->elem<<endl;
 return 0;
}




  • 5
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 可以使用一个变量来记录当前最大,然后遍历整个单链表,每次比较当前结点的最大的大小,如果当前结点的最大大,则更新最大最大结点的指针。最后遍历完成后,最大结点的指针就指向了最大的结点。 ### 回答2: 单链表是一种常见的数据结构,由一个个结点组成,每个结点包含数据域和指针域。单链表每个结点的指针指向下一个结点,最后一个结点的指针域为NULL。如何在单链表确定最大的结点呢? 方法一:遍历单链表,寻找最大 一种直观的方法是通过遍历单链表,依次比较每个结点的数据域,并记录当前最大和对应结点的指针。遍历结束后,最大所在的结点指针即为所求。 具体实现步骤如下: 1. 定义一个指针p,指向单链表的第一个结点。 2. 定义一个变量max,初为p所指结点的数据域。 3. 定义一个指针maxNode,初为p。 4. 遍历单链表,对于每个结点,比较其数据域与max的大小关系,如果大于max,则更新max和maxNode的。 5. 最后返回maxNode即可。 方法二:使用快速排序 另一种方法是使用快速排序。快速排序是一种高效的排序算法,它的基本思想是选取一个枢轴元素,然后将比它小的元素放到它的左边,比它大的元素放到它的右边,再递归地对左右两边进行排序。 具体实现步骤如下: 1. 定义一个数组a,长度为单链表的长度。 2. 遍历单链表,将每个结点的数据域存入数组a的相应位置。 3. 对数组a进行快速排序,得到最大所在的位置。 4. 将最大所在的位置对应的结点指针返回即可。 以上是两种寻找单链表最大的结点的方法,各有优缺点,可以根据具体的场景进行选择。 ### 回答3: 单链表是一种由若干个节点所构成的线性结构,每个节点都包含两个部分:数据域和指针域。在单链表节点之间通过指针进行连接,每个节点只能访问它所连接的下一个节点,而不能像数组一样随意访问其它节点。如果要在单链表确定最大的结点,就必须遍历整个链表,在遍历的过程记录下每个节点,并比较它们的大小,最终找到最大节点。具体的步骤如下: 1. 定义一个指针变量p,指向链表的头结点。 2. 定义一个整型变量max,表示当前已知的最大,初始为链表的第一个节点。 3. 从链表的头结点开始遍历遍历的方式可以使用while循环,循环条件为p!=NULL,即指针p没有指向链表的结尾。 4. 在遍历的过程,对于每个节点,都将它的与max进行比较,如果比max大,则更新max的,并记录下当前节点的地址,用一个指针变量maxNode指向它。 5. 最终,当遍历完成后,maxNode指向的就是最大节点,可以输出它的地址、以及它在链表的位置。 总之,通过一趟遍历就可以在单链表确定最大的结点。需要注意的是,在遍历的过程要使用指针变量p和maxNode来保存当前节点的地址,方便后续的操作。此外,单链表并不支持随机访问,因此在遍历时要注意每个节点的指针域是否为空,如果为空就表示已经到达链表的尾部,遍历结束。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值