2011-06-28 35 views
-3

可能重复:
merge two linked list into a single list归并排序两种链表

typedef struct node 
{ 
int info; 
struct node *NEXT; 
}*NODE; 


NODE insert_front(int item, NODE first) 
{ 
NODE temp; 
temp = (struct node *) malloc(sizeof (struct node*)); 
temp -> info = item; 
temp -> NEXT = first; 
return temp; 
} 

void display(NODE first) 
{ 
NODE temp; 
if(first == NULL) 
{ 
    printf("list is empty \n"); 
    return; 
} 
printf("contents of linked list \n"); 
temp = first; 
while (temp!= NULL) 
{ 
    printf("%d->",temp -> info); 
    temp = temp->NEXT; 
} 
printf("\n"); 
} 


NODE merger_list(NODE first1, NODE first2, NODE merger) 
{ 
NODE merger_temp; 
if(first1==NULL) 
{ 
printf("list1 is empty"); 
exit(1); 
} 

if(first2==NULL) 
{ 
    printf("list2 is empty"); 
    exit(1); 
} 
while(first1!=NULL) 
{ 

merger_temp = (struct node *) malloc(sizeof (struct node*)); 
if(first1->info > first2->info) 
{ 
merger_temp->info = first1->info; 
first1 = first1->NEXT; 
} 
else 
{ 
merger_temp->info = first2->info; 
first2 = first2->NEXT; 
} 

} 

} 
main() 
{ 
NODE first1, first2, merger; 
first1 = NULL; 
first2 = NULL; 
merger = NULL; 
int choice, item; 
while(1) 
{ 
    printf("\n 1:Insert list1 \n 2: Insert list2 \n 3: display1 \n 4: display2 \n 5:merger_list \n 
    printf("enter choice:\n"); 
    scanf ("%d",&choice); 
    switch(choice) 
    { 
     case 1: 
      printf("enter list1\n"); 
      scanf("%d",&item); 
      first1 = insert_front(item,first1); 
      break; 

     case 2: 
      printf("enter list2\n"); 
      scanf("%d",&item); 
      first2 = insert_front(item,first2); 
      break; 
     case 3: 
      display(first1); 
      break; 
     case 4: 
      display(first2); 
      break; 

     case 5: 
      merger_list(first1, first2, merger); 
      break; 
     case 6: 
       display(merger); 
      break; 
     case 7: 
      exit(0); 

     default : 
      printf("invalid data entered\n"); 
    } 

} 
} 

此代码工作正常进行合并两个链表。我有两个链表,list1有1 3 5 7和list2有2 4 6 8.当我合并这两个列表时,我得到正确的输出,但在我的最后一个条件中,它给出了一个分段错误,当最后一个元素列表被合并。我怎样才能消除这个错误?

+2

大家给予更多的则7行的代码应该先调试呀 – levu

+2

,真的是无可救药.. –

+0

Zé[email protected]是的,它是在这里,我只有在边界条件如何克服problrem它 –

回答

0

在您的merger_list函数中,只要first1不为null,while循环就会执行。

但是,你也通过前2列表前进。我怀疑这是你的问题。

尝试:

while((first1!=NULL) && (first2!=NULL))