单链表查找最大值
代码:
1 #include2 #include 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 >q->value; //按顺序输入每个节点的值value15 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; //输入链表的长度n34 a->next=NULL;35 build_link(a,n);36 Node *pmax=Find(a);37 cout< value<
两个递增链表的合并,并且去重
实现代码:
1 #include2 #include 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 >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'< value<<' '< value< next=a;27 p=a;28 b=b->next;29 a=a->next;30 }else if(a->value < b->value){31 //cout<<'a'< value<<' '< value< next=a;33 p=a;34 a=a->next;35 }else{36 //cout<<'c'< value<<' '< value< 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< next->value<<' ';61 a=a->next;62 }63 return 0;64 }
如有错误,麻烦指出。Thanks♪(・ω・)ノ