思路:另外新建一个独立的链表作为合并的结果。设置两个指针,分布从两个表头开始,依次向后移动,并不断比较他们所指的元素的大小关系,每次把比较小的结点复制到新的循环链表中。

时间复杂度:每个结点访问一次,时间代价为O(n)。其中,n为链表list1和list2长度的最大值。

程序代码:

  LinkList combine_clink(LinkList list1,LinkList list2)

  {

    LinkList list3 = (LinkList)malloc(sizeof(struct Node));

    PNode p1 = list1->link,p2 = list2->link,p3 = list3;

    if(p1 == list1 && p2 == list2)    //如果list1和list2都是空表,则让空表头结点的指针指向头结点自己

    {

      list3->link = list3;

      return list3;

    }

    while(p1 != list1 || p2 != list2)

    {

      p3->link = (PNode)malloc(sizeof(struct Node));

      p3 = p3->link;

      if(p2 == list2 || (p1 != list1 && p1->info <= p2->info))

      //如果list2已搜索完毕,或者list1的当前元素不大于链表list2的当前元素

      {

        p3->info = p1->info;

        p1 = p1->link;

      }

      else

      //如果list1已搜索完毕,或者链表list1的当前元素大于链表list2的当前元素

      {

        p3->info = p2->info;

        p2 = p2->link;

      }

    }

    p3->link = list3;

    return list3;

  }

相关文章:

  • 2022-12-23
  • 2021-07-31
  • 2021-08-27
  • 2021-12-15
  • 2021-11-26
  • 2022-12-23
  • 2021-10-05
猜你喜欢
  • 2021-09-04
  • 2022-02-16
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-09-09
  • 2021-09-30
相关资源
相似解决方案