HeY!!!!!!!!
  Thanks for the reply .......
  here i have both the linked list iam using as global !!!!!!!!!!!!!!!!!!!!
  so i a not passing it in the merege function the probelem is that the program 
is going into a infinite loop when iam pointing temp2 to the mid+1 index in my 
program during the while loop in the merge function .........
  sae is the case with the pointer to the low index in the while loop preceing 
the previous...................
   
  can u think of a solution for this ...........
   
  thank u once again 
  cya

Jincy Jacob <[EMAIL PROTECTED]> wrote:
          Hey,

I think the problem is with function merge().
You are not passing the linked list as an argument for merge function.
I found out that we need to pass two linked lists to the merge() function.
Otherwise, the merge will occur locally in the merge() and won't be
reflected when the function returns.
Thanks
J.

On Jan 23, 2008 10:56 AM, <[EMAIL PROTECTED]> wrote:

> hey friends can u please debug i am sending
> there is a probelem in the code its not sorting i guess properly
> !!!!!!!!!!!!!
>
> #include<stdio.h>
> #include<conio.h>
> typedef struct node
> {
> int index;
> int data;
> struct node*next;
> }node;
> node *head,*aux;
> void merge(int low,int mid,int high)
> {
> node *temp1,*temp2,*l1;
> aux=NULL;
> l1=aux;
> temp1=head;
> while(temp1->index!=low)
> temp1=temp1->next;
> temp2=head;
> while(temp2->index!=mid+1)
> temp2=temp2->next;
> while(temp1->index<=mid && (temp2->index<=high && temp2!=NULL))
> {
> if(temp1->data>temp2->data)
> {
> if(l1==NULL)
> {
> // l1=(node*)malloc(sizeof(node));
> l1=temp2;
> temp2=temp2->next;
> }
> else
> {
> // l1->next=(node*)malloc(sizeof(node));
> l1->next=temp2;
> l1=l1->next;
> temp2=temp2->next;
> }
> l1->next=NULL;
> }
> else
> {
> if(l1==NULL)
> {
> //l1=(node*)malloc(sizeof(node));
> l1=temp1;
> temp1=temp1->next;
> }
> else
> {
> //l1->next=(node*)malloc(sizeof(node));
> l1->next=temp1;
> l1=l1->next;
> temp1=temp1->next;
> }
> l1->next=NULL;
> }
> }
> while(temp1->index<=mid)
> {
> if(l1==NULL)
> {
> //l1=(node*)malloc(sizeof(node));
> l1=temp1;
> temp1=temp1->next;
> }
> else
> {
> //l1->next=(node*)malloc(sizeof(node));
> l1->next=temp1;
> l1=l1->next;
> temp1=temp1->next;
> }
> l1->next=NULL;
> }
> while(temp2->index<=high)
> {
> if(l1==NULL)
> {
> //l1=(node*)malloc(sizeof(node));
> l1=temp2;
> temp2=temp2->next;
> }
> else
> {
> //l1->next=(node*)malloc(sizeof(node));
> l1->next=temp2;
> l1=l1->next;
> temp2=temp2->next;
> }
> l1->next=NULL;
> }
> }
> void merge_sort(int low,int high)
> {
> int mid;
> if(low<high)
> {
> mid=(low+high)/2;
> merge_sort(low,mid);
> merge_sort(mid+1,high);
> merge(low,mid,high);
> }
> }
>
> void main()
> {
> int n,x,i;
> node *p,*end;
> clrscr();
> head=NULL;
> printf("\nEnter the no of elements in the list\n");
> scanf("%d",&n);
> for(i=0;i<n;i++)
> {
> printf("\nEnter the data you want to enter\n");
> scanf("%d",&x);
> if(head==NULL)
> {
> head=(node*)malloc(sizeof(node));
> head->index=i;
> head->data=x;
> head->next=NULL;
> p=head;
> }
> else
> {
> p->next=(node*)malloc(sizeof(node));
> p->next->index=i;
> p->next->data=x;
> p=p->next;
> }
> p->next=NULL;
> }
> printf("\nThe given list before sorting\n");
> p=head;
> while(p!=NULL)
> {
> printf("%d\t",p->data);
> p=p->next;
> }
> end=head;
> while(end->next!=NULL)
> end=end->next;
> merge_sort(head->index,end->index);
> printf("\nThe linked list after sorting is\n");
> p=aux;
> while(p!=NULL)
> {
> printf("%d\t",p->data);
> p=p->next;
> }
> getch();
> }
>
> ---------------------------------
> Get the freedom to save as many mails as you wish. Click here to know how.
>
> [Non-text portions of this message have been removed]
>
> 
>

[Non-text portions of this message have been removed]



                         

       
---------------------------------
 Get the freedom to save as many mails as you wish. Click here to know how.

[Non-text portions of this message have been removed]

Reply via email to