数据结构PTA第二周作业1

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

单向链表合并比较简单,但是想通过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.csdn.net/Dr_S_/article/details/78638609

用递归实现的:https://blog.csdn.net/biezhihua/article/details/79935765

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

 

你可能感兴趣的:(PTA)