zoukankan      html  css  js  c++  java
  • 单链表查找最大值、两个递增的链表合并并且去重

    单链表查找最大值

    代码:

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

  • 相关阅读:
    java基础知识回顾之java Thread类学习(三)--java线程实现常见的两种方式实现好处:
    java基础知识回顾之java Thread类--java线程实现常见的两种方式实现Runnable接口(二)
    java基础知识回顾之java Thread类--java线程实现常见的两种方式(一)
    java基础知识回顾之javaIO类--RandomAccessFile类
    java基础知识回顾之javaIO类--java序列化和反序列化
    X明X源面试题《三》
    X明X源面试题《二》
    SqlServer查询计划
    X明X源面试题《一》
    索引笔记《二》确定需要建立索引的列
  • 原文地址:https://www.cnblogs.com/ISGuXing/p/8778408.html
Copyright © 2011-2022 走看看