程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> 編程解疑 >> 數據結構-使打印出來的排序沒有重復的數字,哪位大神幫我改一下,謝謝

數據結構-使打印出來的排序沒有重復的數字,哪位大神幫我改一下,謝謝

編輯:編程解疑
使打印出來的排序沒有重復的數字,哪位大神幫我改一下,謝謝

#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;
}

最佳回答:


 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. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved