单链表查找最大值两个递增的链表合并并且去重

Posted ISGuXing

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了单链表查找最大值两个递增的链表合并并且去重相关的知识,希望对你有一定的参考价值。

单链表查找最大值

代码:

 1 #include<iostream>
 2 #include<bits/stdc++.h>
 3 using namespace std;
 4 struct Node{
 5     int value;
 6     Node * next;
 7 };
 8 Node *a=new Node; //创建头指针
 9 void build_link(Node * a,int n){ //建表
10     Node *p;
11     p=a;
12     for(int i=0;i<n;i++){
13         Node *q=(Node *)malloc(sizeof(Node)); //给下一节点开辟空间
14         cin>>q->value; //按顺序输入每个节点的值value
15         q->next=NULL;
16         p->next=q;
17         p=q;
18     }
19 }
20 Node * Find(Node *a){ //查找最大值的节点
21     Node *pmax;
22     pmax=a->next;
23     while(a->next!=NULL){
24         if(pmax->value<(a->next->value)){
25             pmax=a->next; //pmax指向最大值节点
26         }
27         a=a->next;
28     }
29     return pmax; //返回最大值节点的地址
30 }
31 int main(){
32     int n;
33     cin>>n; //输入链表的长度n
34     a->next=NULL;
35     build_link(a,n);
36     Node *pmax=Find(a);
37     cout<<pmax->value<<endl; //输出最大值
38     return 0;
39 }

 

两个递增链表的合并,并且去重

实现代码:

 1 #include<iostream>
 2 #include<bits/stdc++.h>
 3 using namespace std;
 4 struct Node{
 5     int value;
 6     Node *next;
 7 };
 8 void build_link(Node * a,int n){
 9     Node *p=a;
10     for(int i=0;i<n;i++){
11         Node *q=new Node;
12         cin>>q->value;
13         q->next=NULL;
14         p->next=q;
15         p=q;
16     }
17 }
18 void combine(Node *a,Node *b){
19     Node *p;
20     p=a; //p所指向的节点必须是比较的两个节点之前的节点!因为这个地方我找了好久的bug,如果不是这样会造成部分样例死循环!
21     a=a->next;
22     b=b->next;
23     while(a!=NULL&&b!=NULL){
24         if(a->value == b->value){
25             //cout<<‘b‘<<a->value<<‘ ‘<<b->value<<endl;
26             p->next=a;
27             p=a;
28             b=b->next;
29             a=a->next;
30         }else if(a->value < b->value){
31             //cout<<‘a‘<<a->value<<‘ ‘<<b->value<<endl;
32             p->next=a;
33             p=a;
34             a=a->next;
35         }else{
36             //cout<<‘c‘<<a->value<<‘ ‘<<b->value<<endl;
37             p->next=b;
38             p=b;
39             b=b->next;
40         }
41    }
42     if(a==NULL){
43         p->next=b;
44     }else{
45         p->next=a;
46     }
47 }
48 int main(){
49     Node *a=(Node*)malloc(sizeof(Node));
50     Node *b=(Node*)malloc(sizeof(Node));
51     a->next=NULL;
52     b->next=NULL;
53     int n1,n2;
54     cin>>n1;
55     build_link(a,n1);
56     cin>>n2;
57     build_link(b,n2);
58     combine(a,b);
59     while(a->next!=NULL){
60         cout<<a->next->value<< ;
61         a=a->next;
62     }
63     return 0;
64 }

如有错误,麻烦指出。Thanks?(?ω?)?

以上是关于单链表查找最大值两个递增的链表合并并且去重的主要内容,如果未能解决你的问题,请参考以下文章

剑指offer 17:合并两个有序链表

两个递增有序的单链表,设计算法成一个非递减有序的链表

两个递增有序的单链表,设计算法成一个非递减有序的链表

合并两个有序单链表

合并两个有序的单链表,合并之后的链表依然有序出现频率高

JZ-016-合并两个排序的链表