• [刷题] PTA 02-线性结构1 两个有序链表序列的合并


    程序:

     1 #include <stdio.h>
     2 #include <stdlib.h>
     3 
     4 typedef int ElementType;
     5 typedef struct Node *PtrToNode;
     6 struct Node {
     7     ElementType Data;
     8     PtrToNode   Next;
     9 };
    10 typedef PtrToNode List;
    11 
    12 List Read(); /* 细节在此不表 */
    13 void Print( List L ); /* 细节在此不表;空链表将输出NULL */
    14 
    15 List Merge( List L1, List L2 );
    16 
    17 int main()
    18 {
    19     List L1, L2, L;
    20     L1 = Read();
    21     L2 = Read();
    22     L = Merge(L1, L2);
    23     Print(L);
    24     Print(L1);
    25     Print(L2);
    26     return 0;
    27 }
    28 
    29 List Merge(List L1,List L2) {
    30     List L3=(List)malloc(sizeof(struct Node));
    31     List L = L3;
    32     List p1=L1->Next;
    33     List p2=L2->Next;
    34     while(p1&&p2) {
    35         if(p1->Data<p2->Data) {
    36             L->Next = p1;
    37             p1=p1->Next;
    38         } else {
    39             L->Next = p2;
    40             p2=p2->Next;
    41         }
    42         L=L->Next;
    43     }
    44 L->Next = NULL;
    45 if(p1) L->Next=p1;
    46 if(p2) L->Next=p2;
    47 L1->Next=NULL;
    48 L2->Next=NULL;
    49 return L3;
    50 }

    分析:

    1、带头结点的单链表,头结点没有数据

    2、链表没有整体概念,只有结点

    3、利用现有序列中的结点,定义一个新的头结点后,重新定义结点间的连接关系即可。malloc()只使用一次

    4、头结点是遍历链表所必须的,定义后不可更改

    5、只要p1、p2一个结束了,就把L整体接到没结束的那个链表上,同时原链表指向空

  • 相关阅读:
    mysql replication常见错误整理
    enq: TX
    LOGMNR分析redo log和archive log教程
    使用create datafile... as ...迁移数据文件到裸设备
    mysql无法启动,报错 Can't start server: can't create PID file: No space left on device
    MYSQL 权限设置查询
    ORA-02437 违反主键
    oracle sequence的用法
    sequence有关问题
    关于Relay Log无法自动删除的问题
  • 原文地址:https://www.cnblogs.com/cxc1357/p/10808103.html
Copyright © 2020-2023  润新知