数据结构中关于链表的一个简单问题

学数据结构还是上个学期的事,什么?觉得怎么样?唉,别提了,那个时候被我们那位女老师给搞晕了,上课的时候只有一个声调,照着书本上的算法在黑板解释给我们听都还不能流畅,你就可想而知我们觉得怎么样了。当然啦,这些都是客观原因,自己不认真是实质所在。一直很想再好好看看,现在又有机会听一位科大博士的数据结构课程,自然是倍感珍惜,只希望可以跟着他,把以前的知识再过一遍,我想会有新的收获。
    下面就把今天这个问题讲一下吧,也许在老鸟看来是一个小儿科的问题,但是没有办法,我不是什么聪明的人,只好用笨办法,现在一边回忆一边总结。就算我记性不好,时不时的拿来看看,一来可以巩固一下知识,二来,也许会发现以前的不足。
     问题1:合并两个递增的线性链表为一个递增的线性链表。
                    这个问题是我们的数据结构课程里,是一个常见的问题。但是以住我们会不太注意时间和空间复杂度的问题,这个学期我又选了算法这门课,一边惊叹同一个问题用不同的方法可能会带来效率的极大差别,一边也告诉自己,以后做程序不能以解决问题做为评判成绩唯一标准。而要追求,出色的完成任务。所以,这是我从这个问题考虑到的。
      解决:基于比较,分别比较两个链表的元素,选出较小的加到新的链表中。
      算法:

void MargeList( LinkList &La, LinkList &Lb, LinkList &Lc)
{
   Pa
=La->next;Pb=Lb->next;//初始化链表
      Lc=Pc=La;//共用La的结点空间
      
      
while( pa&&pb ){
      
if( pa->data <= pb->data ){
          pc
->next=pa;   //链到Lc头结点后
          pc = pa;       //pc指针移到Lc的最后一个结点
          pa=pa->next;   //pa指向下一个结点
            }

      
else
      
{
          pc
->next=pb;
          pc 
= pb;
          pb 
= pb->next;
      }

      pc
->next==pa?pa:pb;  //剩下的结点直接插入
      free(Lb);
}
     
   
(未完,我去吃饭了)
posted on 2006-03-04 18:15  Stone_石头  阅读(503)  评论(1编辑  收藏  举报