两个单向有序链表的归并算法实例
来源:优易学  2011-11-9 14:31:31   【优易学:中国教育考试门户网】   资料下载   IT书店

  //递归算法

  NodePtr merge_lists(NodePtr& one_head,NodePtr& two_head)

  {

  NodePtr p1;

  p1=NULL;

  if(one_head == NULL && two_head == NULL)

  return p1;

  else if(one_head == NULL && two_head != NULL)

  return two_head;

  else if(one_head != NULL && two_head == NULL)

  return one_head;

  else

  {

  if(one_head->data <= two_head->data)

  {

  p1=one_head;

  p1->link = merge_lists(one_head->link,two_head);

  }

  else

  {

  p1=two_head;

  p1->link = merge_lists(one_head,two_head->link);

  }

  return p1;

  }

  }

  //迭代算法

  NodePtr merge_lists(NodePtr& one_head,NodePtr& two_head)

  {

  if(one_head == NULL)

  return two_head;

  if(two_head == NULL)

  return one_head;

  NodePtr head = NULL;

  if(one_head->data < two_head->data)

  {

  head = one_head;

  one_head = one_head->link;

  }

  else

  {

  head = two_head;

  two_head = two_head->link;

  }

  NodePtr current_Ptr = head;

  while(one_head !=NULL && two_head !=NULL)

  {

  if(one_head->data <= two_head->data)

  {

  current_Ptr->link = one_head;

  current_Ptr = one_head;

  one_head = one_head->link;

  }

  else

  {

  current_Ptr->link = two_head;

  current_Ptr = two_head;

  two_head = two_head->link;

  }

  }

  if(one_head != NULL)

  current_Ptr->link = one_head;

  if(two_head != NULL)

  current_Ptr->link = two_head;

  return head;

  }

责任编辑:小草

文章搜索:
 相关文章
热点资讯
资讯快报
热门课程培训