C++实现链表中可被给定数字k整除的最大和最小元素
链表是一种线性数据结构,其中元素通过指针链接。链表的每个元素或节点都包含数据部分和链接,或者可以说指向序列中下一个元素的指针。这些元素可以在内存中占据非连续的位置。
我们得到一个单链表,其中包含数据部分和指向下一个元素的链接。另一个输入是一个数字K。任务是找到链表中可被数字K整除的最大和最小元素。单链表只能单向遍历。在每个节点处,我们将检查其数据部分是否能被K整除。如果该数字是迄今为止找到的最大值或最小值,我们将更新MaxD和MinD的值。
输入
SList : 5-->2-->10-->12-->3-->20-->7, K=5
输出
Maximum element which is divisible by K : 20 Maximum element which is divisible by K : 5
说明 − 从头节点开始遍历,不断地将数据部分除以K,并检查它是否完全可整除,即余数为0。
在5, 10和20中,只有5, 10和20能被5整除,其中5最小,20最大。
输入
SList : 12-->2-->5-->18-->3-->144-->7, K=4
输出
Maximum element which is divisible by K : 144 Maximum element which is divisible by K : 12
说明 − 从头节点开始遍历,不断地将数据部分除以K,并检查它是否完全可整除,即余数为0。
在12和144中,只有12和144能被4整除,其中12最小,144最大。
下面程序中使用的步骤如下
创建一个链表节点。这里我们创建了一个名为SLLnode的类,它具有信息部分和下一个指针。
创建一个链表。这里我们创建了一个名为SLList的类,其成员是SLLnode对象。因此,SLList由SLLnode组成。
函数addtohead(int)将节点添加到此列表。
为了向SLList添加元素,我们使用名为LIST的SLList对象调用addtohead(int)。
创建SLList后,我们调用函数Divisible(SLLnode,int),它接受列表的头和整数K作为两个输入参数。
现在在Divisible函数内部,我们使用两个变量maxD和minD来存储链表中可被给定数字K整除的最大和最小元素。
maxD初始化为-1,minD初始化为9999。这被认为是输入所在的范围。
在for循环内,我们从头开始遍历链表。为此,变量start指向头。
将每个节点的信息部分与maxD和minD以及它与K的可整除性进行比较。如果当前节点的信息可整除且小于minD,则用当前信息部分更新minD。
如果当前节点的信息可被K整除且大于maxD,则用当前信息部分更新maxD。
打印minD和maxD中获得的结果。
示例
#include<iostream.h> #include<process.h> #include<conio.h> class SLLnode{ public: int info; SLLnode *next; SLLnode(int e1,SLLnode *ptr=0){ info=e1; next=ptr; } }; class SLList{ public: SLLnode *head; SLList() { head=0; } void addtohead(int); }; void SLList::addtohead(int el) { head=new SLLnode(el,head); } void Divisible(SLLnode* head, int K){ int minD=9999; int maxD=-1; SLLnode* start=head; for(start;start->next!=NULL;start=start->next){ if ((start->info < minD) && (start->info % K == 0)) minD = start->info; if ((start->info > maxD) && (start->info % K == 0)) maxD = start->info; } cout << "Max Element divisible by K: " << maxD << endl; cout << "Min Element divisible by K: " << minD; } // Driver Code int main(){ clrscr(); // Start with empty list SLList LIST; LIST.addtohead(50); LIST.addtohead(21); LIST.addtohead(32); LIST.addtohead(45); LIST.addtohead(11); LIST.addtohead(23); LIST.addtohead(90); LIST.addtohead(56); int K = 5; Divisible(LIST.head, K); getch(); return 0; }
Explore our latest online courses and learn new skills at your own pace. Enroll and become a certified expert to boost your career.
输出
如果我们运行上面的代码,它将生成以下输出:
Max Element divisible by K: 90 Min Element divisible by K: 45