博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
两个有序链表序列的合并
阅读量:6340 次
发布时间:2019-06-22

本文共 2488 字,大约阅读时间需要 8 分钟。

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/sinat_32502811/article/details/78024193

02-线性结构1 两个有序链表序列的合并(15 分)

本题要求实现一个函数,将两个链表表示的递增整数序列合并为一个非递减的整数序列。
函数接口定义:

List Merge( List L1, List L2 );

其中List结构定义如下:
typedef struct Node *PtrToNode;
struct Node {
ElementType Data; /* 存储结点数据 */
PtrToNode Next; /* 指向下一个结点的指针 */
};
typedef PtrToNode List; /* 定义单链表类型 */
L1和L2是给定的带头结点的单链表,其结点存储的数据是递增有序的;函数Merge要将L1和L2合并为一个非递减的整数序列。应直接使用原序列中的结点,返回归并后的链表头指针。
裁判测试程序样例:

#include 
#include
typedef int ElementType;typedef struct Node *PtrToNode;struct Node { ElementType Data; PtrToNode Next;};typedef PtrToNode List;List Read(); /* 细节在此不表 */void Print( List L ); /* 细节在此不表;空链表将输出NULL */List Merge( List L1, List L2 );int main(){ List L1, L2, L; L1 = Read(); L2 = Read(); L = Merge(L1, L2); Print(L); Print(L1); Print(L2); return 0;}/* 你的代码将被嵌在这里 */

输入样例:

3

1 3 5
5
2 4 6 8 10
输出样例:

1 2 3 4 5 6 8 10

NULL
NULL

我的程序

List Merge( List L1, List L2 )   {      List pa,pb,pc,L;      L = (List)malloc(sizeof(struct Node));      pa=L1->Next;      pb=L2->Next;      pc = L;      while(pa && pb)      {          if(pa->Data <= pb->Data)          {              pc->Next = pa;              pc = pa;              pa = pa->Next;          }          else          {              pc->Next = pb;              pc = pb;              pb = pb->Next;          }      }      pc->Next = pa ? pa : pb;      L1->Next = NULL;      L2->Next = NULL;      return L;  }

附上一开始我的代码(只得了2分。。。):

List Merge( List L1, List L2 ){  List p1 = L1;  List p2 = L2;  List rear,front,temp;  rear = (List)malloc(sizeof(struct Node));  front = rear;  while(p1 && p2){    switch(Compare(p1->Data, p2->Data)){      case 1:        attach(p2->Data,&rear);        p2 = p2->Next;        break;      case -1:        attach(p1->Data,&rear);        p1=p1->Next;        break;      case 0:        attach(p1->Data,&rear);        p1 = p1->Next;        p2 = p2->Next;        break;    }  }  for(;p1;p1->Next) attach(p1->Data,&rear);  for(;p2;p2->Next) attach(p2->Data,&rear);  rear->Next = NULL;  temp = front;  front = front->Next;  free(temp);  return front;}void attach(int a, List *pRear){  List p;  p = (List)malloc(sizeof(struct Node));  p -> Data = a;  p -> Next = NULL;  (*pRear)->Next = p;  *pRear = p;  free(p);}int Compare(int a,int b){  if(a>b) return 1;  if(a

这里写图片描述

  1. 首先,明明几行就可以搞定的代码,我非得想复杂,又重新写了两个函数出来,思维僵化······
  2. 看输入输出样例!!!看到那有个NULL!!!
  3. 运行超时,我估计是while后面的for循环导致的,不知道对不对
  4. 其实我真的不知道我错在哪里······
你可能感兴趣的文章
调试网页PAIP HTML的调试与分析工具
查看>>
路径工程OpenCV依赖文件路径自动添加方法
查看>>
玩转SSRS第七篇---报表订阅
查看>>
WinCE API
查看>>
Linux常用基本命令[cp]
查看>>
CSS 相对|绝对(relative/absolute)定位系列(一)
查看>>
关于 Nginx 配置 WebSocket 400 问题
查看>>
Glide和Govendor安装和使用
查看>>
Java全角、半角字符的关系以及转换
查看>>
Dubbo和Zookeeper
查看>>
前端项目课程3 jquery1.8.3到1.11.1有了哪些新改变
查看>>
UOJ#179. 线性规划(线性规划)
查看>>
整合spring cloud云架构 - SSO单点登录之OAuth2.0登录认证(1)
查看>>
windows的服务中的登录身份本地系统账户、本地服务账户和网络服务账户修改
查看>>
JAVA中循环删除list中元素的方法总结
查看>>
redis 安装
查看>>
SQL some any all
查看>>
电子书下载:Programming Windows Identity Foundation
查看>>
有理想的程序员必须知道的15件事
查看>>
用于测试的字符串
查看>>