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


    单链表查找最大值

    代码:

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

  • 相关阅读:
    Tomcat 三种运行方式
    MariaDB介绍
    Nginx 平滑升级
    代理命令 proxy_pass 详解
    Nginx 和 Tomcat 负载均衡
    基于Apache和tomcat实现负载均衡
    centos7 通过源码编译的方式安装和配置Apache
    基于nginx结合openssl实现https
    HTTP 和 HTTPS 区别
    linux系统中修改别名配置文件,构建命令别名
  • 原文地址:https://www.cnblogs.com/ISGuXing/p/8778408.html
Copyright © 2020-2023  润新知