两个升序链表合并为一个升序链表

Love The Way You Lie 2023-02-21 09:07 276阅读 0赞
  1. LinkList MergeHeaderLinkList(LinkList L,LinkList P)
  2. {
  3. if(L == NULL || P == NULL)
  4. return L == NULL ? L : P ;
  5. LNode *header1,*header2,*S,*back;
  6. if(L->next->data <= P->next->data)
  7. {
  8. header1 = L;
  9. header2 = P;
  10. back = L;
  11. }else
  12. {
  13. header1 = P;
  14. header2 = L;
  15. back = P;
  16. }
  17. while(header2->next != NULL){
  18. while(header1->next != NULL && header1->next->data <= header2->next->data )
  19. {
  20. header1 = header1->next;
  21. printf("正在寻找...\n");
  22. }
  23. if(header1->next == NULL){
  24. printf("header1为空了\n");
  25. header1 ->next = header2->next;
  26. return back;
  27. }
  28. printf("找到比%d大的值%d\n",header2->next->data,header1->next->data);
  29. S = header2->next;
  30. header2->next = S->next;
  31. S->next = header1->next;
  32. header1->next = S;
  33. header1 = header1->next;
  34. }
  35. return back;
  36. }

首先找到第一个结点较小或相等的链表记为 header1 ,while 循环找到 header1 中比 header2 要合并的数据元素大的结点的前驱结点,将 header 链表的头结点的后继结点连接到 header1 后面,继续比较header2的后继结点。直到 header2 中的结点全部比较完成为止。如果header1的后继结点为 NULL,直接将头结点后继结点连接到 header1 后面即可,不必再执行移动结点的操作。
在这里插入图片描述

发表评论

表情:
评论列表 (有 0 条评论,276人围观)

还没有评论,来说两句吧...

相关阅读

    相关 23. 合并K升序

    23. 合并K个升序链表 解题思路 代码 解题思路 其实最开始的思路是N个指针,每次放最小的进新链表,但是这样时间复杂度太高了!合并两个有序链表可以考

    相关 合并k升序

    > 合并K个升序链表 > 给你一个链表数组,每个链表都已经按升序排列。 > 请你将所有链表合并到一个升序链表中,返回合并后的链表。 > 示例 1: > 输入:l