在 c 中使用链表代码进行这种插入排序有什么问题



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

我正在做的是从用户那里获取输入并将其存储到链表,然后实现插入排序。(我可以调用子例程插入排序,所以我想问题仅在子例程中)

#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 sortedn");
    scanf("%d",&n);
    if (n<2){printf("n should be atleast 2 n");return 0;}
    printf("nType space-separated array of %d integersn",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);
}

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

6 行形式最后

if (prevptr=NULL)

它应该是

if (prevptr==NULL)

单个"="执行分配而不是比较。

相关内容

  • 没有找到相关文章

最新更新