回 帖 发 新 帖 刷新版面

主题:经过思考后才请教的,实在想不透??????

void reverse_merge(LinkList &A,LinkList &B,LinkList &C)//把元素递增排列的链表A和B合并为C,且C中元素递减排列,使用原空间
{
  pa=A->next;pb=B->next;pre=NULL; //pa和pb分别指向A,B的当前元素
  while(pa||pb)
  {
    if(pa->data<pb->data||!pb)
    {
      pc=pa;q=pa->next;pa->next=pre;pa=q; //将A的元素插入新表
    }
    else
    {
      pc=pb;q=pb->next;pb->next=pre;pb=q; //将B的元素插入新表
    }
    pre=pc;
  }
  C=A;A->next=pc; //构造新表头
}//reverse_merge
分析:本算法的思想是,按从小到大的顺序依次把A和B的元素插入新表的头部pc处,最后处理A或B的剩余元素. 

  问题:1 这个表头插入不寻常,有点不理解
        2 这个pc的出现不理解  
        3 插入后,元素是怎么连接的 
        4 pc=pa;q=pa->next;pa->next=pre;pa=q
          pc=pb;q=pb->next;pb->next=pre;pb=q这两句实在看不懂
  
     各位,解释一下  谢了啊  

回复列表 (共2个回复)

沙发

1 这个表头插入不寻常,有点不理解
  你这个不寻常是什么意思啊??
2 这个pc的出现不理解  
  就是用来保存插入的数据的啊;
3 插入后,元素是怎么连接的 
  元素都放在C链表那里吧。
4 pc=pa;        //把a的元素复制到c去
  q=pa->next;   
  pa->next=pre; //这个……我不是很理解……
  pa=q          //指向下一个指针,相当于pa=pa->next吧

板凳

这个我也清楚  我倒是认为这个算法不太详细  哎  慢慢学习 谢了啊

我来回复

您尚未登录,请登录后再回复。点此登录或注册