sinat_36204309 2016-09-24 04:52 采纳率: 28.6%
浏览 943
已采纳

使打印出来的排序没有重复的数字,哪位大神帮我改一下,谢谢

#include
#include
typedef struct node
{
int a;
struct node *next;
}*List,list;

List create(int start,int end)
{
List head=(list*)malloc(sizeof(list));
List p=head;
for(int i=start;i<=end;i++){
List t=(list*)malloc(sizeof(list));
t->a=i;
t->next=NULL;
p->next=t;
p=p->next;
}
return head;
}

void print(List head){
List p=head;
while(p){
printf("%3d",p->a);
p=p->next;
}
puts("");
}

List merge(List h1,List h2){
List p=(list*)malloc(sizeof(list));
List r=p;
h1=h1->next;
h2=h2->next;
while(h1 || h2){
if(h1==NULL){
p->next=h2;
p=p->next;
h2=h2->next;
continue;
}

if(h2==NULL){
   p->next=h1;
   p=p->next;
   h1=h1->next;
   continue;
}

if(h1->a>h2->a){
   p->next=h2;
   p=p->next;
   h2=h2->next;
}
else {
   p->next=h1;
   p=p->next;
   h1=h1->next;
}
}
return r;

}
int main(){
List h1=create(5,10);
List h2=create(10,15);
List h=merge(h1,h2);
print(h);
return 0;
}

  • 写回答

2条回答

  • leewers 2016-09-24 06:09
    关注
     if(h1->a>h2->a){
           p->next=h2;
           p=p->next;
           h2=h2->next;
        }
        else if(h1->a < h2->a){
           p->next=h1;
           p=p->next;
           h1=h1->next;
        }
        else{
            p->next=h2;
            p=p->next;
            h2=h2->next; //反正两个链表头元素相等,随便加入一个
            h1 = h1->next;//将另外一个无视掉就可以了
        }
    

    另外在print(h)之前最好加上h = h->next;因为按照你的写法,链表h的头元素其实是多余的

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥20 我想使用一些网络协议或者部分协议也行,主要想实现类似于traceroute的一定步长内的路由拓扑功能
  • ¥30 深度学习,前后端连接
  • ¥15 孟德尔随机化结果不一致
  • ¥15 apm2.8飞控罗盘bad health,加速度计校准失败
  • ¥15 求解O-S方程的特征值问题给出边界层布拉休斯平行流的中性曲线
  • ¥15 谁有desed数据集呀
  • ¥20 手写数字识别运行c仿真时,程序报错错误代码sim211-100
  • ¥15 关于#hadoop#的问题
  • ¥15 (标签-Python|关键词-socket)
  • ¥15 keil里为什么main.c定义的函数在it.c调用不了