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");
}
posted @ 2019-12-16 19:25  pycodego  阅读(615)  评论(0编辑  收藏  举报