• 基础数据结构-线性表-单链表的合并操作


    本篇与顺序表的合并题目相同,只不过用了链表的方式实现

    #include <iostream>
    using namespace std;
    #define ok 0
    #define error -1
    
    class ListNode
    {public:
        int data;
        ListNode * next;
        ListNode() {next = NULL;}
     };        //链表结点类定义
     
     class LinkList
     {public:
         ListNode *head;
         int len;
         LinkList();
         //~LinkList();
         ListNode * LL_index(int i);        //返回第i个结点的指针,如果不存在返回NULL 
         int LL_get(int i);        //获取第i个元素的数据 
         int LL_insert(int i,int item);        //把数值item插入第i个位置 
         int LL_del(int i);        //删除第i个节点 
         void LL_display();        //输出单链表的内容 
        int LL_merge(ListNode *La, ListNode *Lb);        //合并链表
      };        //带头节点的单链表类定义
      
      LinkList::LinkList()
      {
          head = new ListNode();
          len = 0;
      }
      
    /*  LinkList::~LinkList()
      {
          ListNode *p,*q;
          p = head;
          while(p != NULL){
              q = p;
              p = p->next;
              delete q;
          }
      }*/
    
      ListNode * LinkList::LL_index(int i)
      {      
        ListNode *p;
          int j = 0;
          p = head;
          while(p!=NULL && j<i){
              p = p->next;
            j++;
        }
        if(!p)  return NULL;
        return p;
      }
      
      int LinkList::LL_get(int i)
      {
          if(i<1||i>len) return error;
        else{
        ListNode *LL;
        LL =  LL_index(i);
        cout << LL->data << endl;
        return ok;
        }
      }
      
      int LinkList::LL_insert(int i,int item)
      {
          if(i>len+1) return error;
        else{
              ListNode *p,*s;
              p = LL_index(i-1);
              s = new ListNode();
              s->next = p->next;
              p->next = s;
              s->data = item;
            len++;
            return ok;
        }
      }
      
      int LinkList::LL_del(int i)
      {
          if(i<1||i>len) return error;
        else{
              ListNode *p;
            p = LL_index(i-1);
            p->next = p->next->next;
              len--;
            return ok;
            }
      }
        
      void LinkList::LL_display()
      {
          ListNode *p;
          p = head->next;
          while(p){
              cout << p->data << ' ';
              p = p->next;
          }
          cout<<endl;
      }
    
    int LinkList::LL_merge(ListNode *La, ListNode *Lb)
      {
        ListNode *pa, *pb, *pc, *Lc,*p;
        pa = La->next;    pb = Lb->next;
        Lc = pc = La;             // 用La的头结点作为Lc的头结点
        while (pa && pb) {
          if (pa->data <= pb->data) 
          {  pc->next = pa;   pc = pa;   pa = pa->next;  }
          else { pc->next = pb;   pc = pb;   pb = pb->next; }
        }
        pc->next = pa ? pa : pb;  // 插入剩余段
        p = Lc->next;
          while(p){
              cout << p->data << ' ';
              p = p->next;
          }
          cout<<endl;
          return 0;
      }
    
      int main()
      {
          int i,it,len;
          LinkList ll_1,ll_2;
        cin >> len;
        for(i=1;i<=len;i++){
            cin >> it;
            ll_1.LL_insert(i,it);
        }
        cin >> len;
        for(i=1;i<=len;i++){
            cin >> it;
            ll_2.LL_insert(i,it);
        }
        ll_2.LL_merge(ll_1.LL_index(0),ll_2.LL_index(0));  
        return 0;
      }

    因为最近笔记本B面裂了准备去修,复杂些的会优先加上注释,所以在家先把代码和题目贴上来以后补文字,有疑问可以在下面留言。 

  • 相关阅读:
    Asp.net 动态添加Meta标签
    【转】在SharePoint Server 2010中更改“我的网站”
    SPQuery DateTime 类型查询
    Asp.net Web Application 打开 SharePoint 2010 Site 错误 The Web application at could not be found
    How To Create SharePoint 2010 Site Collection In Its Own DB
    C# 文件打印
    面试题 java集合
    《深入理解Java虚拟机》(六)堆内存使用分析,垃圾收集器 GC 日志解读
    《深入理解Java虚拟机》(五)JVM调优
    《深入理解Java虚拟机》(四)虚拟机性能监控与故障处理工具
  • 原文地址:https://www.cnblogs.com/nathaneko/p/6491238.html
Copyright © 2020-2023  润新知