数据结构PTA第二周作业1

本文介绍了如何将两个有序链表合并成一个新的有序链表,重点强调了PTA测试中的注意事项,包括原链表和返回链表都包含头节点,输出样例需显示L1和L2为NULL,以及空链表处理。同时提供了递归实现的参考链接和《算法笔记》中的数组实现方法。

题目:将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。

单向链表合并比较简单,但是想通过PTA的测试还是要注意审题的。

注意点1:规定了原链表和返回的链表都有头节点。

注意点2:输出样例除了要求输出的L正确,原来的L1,L2都要输出NULL。(就是这一点不注意导致一直卡着没AC)并且空链表也是要有头结点的,让L1,L2本身值为NULL是不行的,那样L1,L2就不再是链表了。

 

List Merge( List L1, List L2 )
{
  //List L;
  //List Temp = L;
  List L, Temp, p1, p2;
  L = (List)malloc(sizeof(struct Node));
  Temp = L;
  
  p1=L1->Next;
  p2=L2->Next;
  while(p1!=NULL && p2!=NULL)
  {
    if(p1->Data <= p2->Data){
      Temp->Next = p1;
      p1 = p1->Next;
      Temp = Temp->Next;
    }
    else{
      Temp->Next = p2;
      p2 = p2->Next;
      Temp = Temp->Next;
    }
  }
  if(p1==NULL)Temp->Next = p2;
  if(p2==NULL)Temp->Next = p1;
  
  L1->Next=NULL;
  L2->Next=NULL;//注意输出格式要求
  return L;
}

补充一些其他回答:https://blog.youkuaiyun.com/Dr_S_/article/details/78638609

用递归实现的:https://blog.youkuaiyun.com/biezhihua/article/details/79935765

《算法笔记》书上P139两个序列的合并问题和这个一样,书上使用数组的形式实现的。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值