单链表查找最大值、两个递增的链表合并并且去重
单链表查找最大值
代码:
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♪(・ω・)ノ