递归合并两个有序链表为一个有序链表

4818阅读 0评论2011-02-12 0xC1988
分类:C/C++

非递归算法应该不难,用递归的思想也能完成这个工作。
  1. /***********************************
  2. *
  3. *链表降序排列
  4. *Author:ckh
  5. *
  6. ************************************/

  7. node * mergelink(node *head1 , node *head2){
  8.     node *tmp=NULL;
  9.     //如果两个指针都为空,则结束执行
  10.     if(head1 == NULL && head2 == NULL)
  11.         return tmp;
  12.     //如果一个链表为空,则只要返回另一个链表剩下部分的第一个节点即可
  13.     else if (head1 == NULL)
  14.         return head2;
  15.     else if (head2 == NULL)
  16.         return head1;
  17.     else{
  18.         //如果两个指针均不为空,则递归处理
  19.         if(head1 -> data > head2 ->data){
  20.             tmp = head1;
  21.             tmp -> next =mergelink(head1 -> next , head2);
  22.         } else {
  23.             tmp = head2;
  24.             tmp -> next =mergelink(head1 , head2 -> next);
  25.         }
  26.     return tmp;
  27. }
上一篇:程序的自我改写
下一篇:练习socket编程的一个文件传输小程序