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

单链表查找最大值

代码:

 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♪(・ω・)ノ

posted @ 2018-04-10 13:49  ISGuXing  阅读(752)  评论(0编辑  收藏  举报