zoukankan      html  css  js  c++  java
  • c++实现对两个有序链表的连接

    #include <iostream>
    using namespace std;
    
    typedef struct node
    {
        int val;
        node* next;
    }node;
    
    
    class ListNode
    {
    private:
        node* l1;
        node* l2;
        node* head;     //新的头结点
        node* rear;     //新的尾结点
    public:
      bool InitList()
      {
          l1=new node;
          l2=new node;
          l1->next=nullptr;
          l2->next=nullptr;
          l1->val=0;    //用来记录链表中有效结点的个数
          l2->val=0;    //用来记录链表中有效结点的个数   
          return true;
      } 
      //首先new一个空的结点
      bool CreateList1(int val)
      {
          node* temp=l1;//将temp赋值l1的地址
          temp->val++;
          while(temp->next!=nullptr&&val>temp->next->val)
          {
            temp=temp->next;           //创建一个有序的链表
          }
          if(temp->next!=nullptr)     //说明是val<=temp->next->val
          {
            node* after = temp->next;
            temp->next=new node;
            temp->next->val=val;
            temp->next->next=after;
          }
          else
          {
          temp->next=new node;
          temp->next->val=val;
          temp->next->next=nullptr;
          }     
          return true;
      }
       bool CreateList2(int val)
      {
          node* temp=l2;//将temp赋值l1的地址
          temp->val++;
          while(temp->next!=nullptr&&val>temp->next->val)
          {
            temp=temp->next;           //创建一个有序的链表
          }
          if(temp->next!=nullptr)     //说明是val<=temp->next->val
          {
            node* after = temp->next;
            temp->next=new node;
            temp->next->val=val;
            temp->next->next=after;
          }
          else
          {
          temp->next=new node;
          temp->next->val=val;
          temp->next->next=nullptr;
          }     
          return true;
      }
      bool printList2()
      {
          while(l2->next!=nullptr)
          {
              cout<<l2->next->val<<endl;
              l2=l2->next;
          }
          return true;
      }
    
      bool Merge()     //合并两个有序的链表
      {
          node* x=l1->next;
          node* y=l2->next;
          while(x!=nullptr&&y!=nullptr)
          {
             if(x->val>y->val)
             {
                head=y;
                rear=y->next;
                while(rear!=nullptr&&rear->val<x->val)
                {
                    head=head->next;
                    rear=rear->next;
                }
                head->next=x;
                node* Next=x->next;
                x->next=rear;
                x=Next;
             }
            else
            {
                node* Next=x->next;
                x->next=y;
                node* ss = l2;
                while(ss->next!=y)
                {
                    ss=ss->next;
                }
                ss->next=x;
                x=Next;
            }
          }
          return true;
      }
    };
    
    
    int main()
    {
       ListNode space;
       space.InitList();
       space.CreateList1(4);
       space.CreateList1(56);
       space.CreateList1(1);
       space.CreateList2(9);
       space.CreateList2(23);
       space.CreateList2(0);
       space.Merge();
       space.printList2();     //打印l2链表的数据
       system("pause");
    }
  • 相关阅读:
    期中架构实现步骤
    安装centos以及优化步骤
    inotify+rsync实现实时热备
    [转]ubuntu安装vncserver实现图形化访问
    [转]电烙铁的使用小技巧
    彻底解决 LINK : fatal error LNK1123: 转换到 COFF 期间失败: 文件无效或损坏
    解读系统托盘图标隐藏(删除)
    一个小公式帮你轻松将IP地址从10进制转到2进制
    [查阅]Dalvik opcodes
    [查阅]MSIL Instruction Set
  • 原文地址:https://www.cnblogs.com/z2529827226/p/12050798.html
Copyright © 2011-2022 走看看