使用c中的链表代码进行此插入排序有什么问题?

时间:2013-09-28 08:59:33

标签: c linked-list

执行此操作时出错。编译器不会给出任何错误,但在执行时会给出随机输出。

我在做什么是从用户&将它们存储到链表&然后实现插入排序。 (我能够调用子程序插入排序,所以我猜问题只在于子程序中)

#include<stdio.h>
#include<stdlib.h>

struct node
{
    int info;
    struct node *next;
};
typedef struct node *NODEPTR;

NODEPTR getnode();
NODEPTR insertionSortLinkedList(NODEPTR head);

int main()
{
    int i,n,temp;
    NODEPTR head,lptr,prevlptr;
    printf("No of input integers to be sorted\n");
    scanf("%d",&n);
    if (n<2){printf("n should be atleast 2 \n");return 0;}
    printf("\nType space-separated array of %d integers\n",n);
    scanf("%d",&temp);

    head=getnode();
    head->info=temp;
    head->next=NULL;
    prevlptr=head;
    for (i=0;i<n-1;i++)
    {
        scanf("%d",&temp);
        lptr=getnode();
        lptr->info=temp;
        prevlptr->next=lptr;
        lptr->next=NULL;
        prevlptr=lptr;  
    }

    head=insertionSortLinkedList(head);

    lptr=head;
    while(lptr!=NULL)
    {
        printf("%d ",lptr->info);
        prevlptr=lptr;
        lptr=lptr->next;
        free(prevlptr);
    }

    return 0;
}


NODEPTR getnode()
{
    NODEPTR p;
    p=(struct node*)malloc(sizeof(struct node));
    return p;
}



NODEPTR insertionSort(NODEPTR head)
{
    NODEPTR listptr,tempptr,prevptr,prevtempptr;
    prevptr=head;
    listptr=prevptr->next;
    while(listptr!=NULL)
    {
        while (listptr->info < prevptr->info)
        {
            prevptr->next=listptr->next;
            tempptr=head;
            prevtempptr=head;
            while(tempptr->info <= listptr->info)
            {
                prevtempptr=tempptr;
                tempptr=tempptr->next;
            }
            if(tempptr->info == prevtempptr->info)
            {
                listptr->next=head;
                head=listptr;
            }
            else
            {e
                listptr->next=prevtempptr->next;
                prevtempptr->next=listptr;              
            }
            listptr=prevptr->next;
            if (listptr==NULL)
            break;
        }
        prevptr=prevptr->next;
        if (prevptr=NULL)
            break;
        listptr=prevptr->next;              
    }
    return(head);
}

我的代码有什么问题,如何解决?

1 个答案:

答案 0 :(得分:5)

最后一行的第6行

if (prevptr=NULL)

应该

if (prevptr==NULL)

单个“=”执行赋值而不是比较。