1
void sortlist()
{
    struct node *a;
    struct node *temp=head;

    struct node *temp1=head->next;

    while(temp!=NULL)
    {
        while(temp1->next!=NULL)
        {
            if(temp->data > temp1->data)
            {
                a->data=temp->data;
                temp->data=temp1->data;
                temp1->data=a->data;
            }
            else
            {
                temp1=temp1->next;
            }
        }
        temp=temp->next;
    }
}

//I am new to data structures.i am encountering some problem here while trying to sort elements of linked list.list does not get sorted.any help is greatly appreciated.

4

3 回答 3

4

a是一个未初始化的指针,所以该行

a->data=temp->data;

调用未定义的行为。崩溃是这里最有可能的结果,因为您将尝试在未定义的地址写入内存,该地址可能无法被您的代码写入,或者可能正在被程序的另一部分使用。

您可以通过提供a相同的类型来解决此问题temp->data

void sortlist()
{
    int a; // change type to match node->data if required
    ...
            if(temp->data > temp1->data)
            {
                a=temp->data;
                temp->data=temp1->data;
                temp1->data=a
            }
    ...
}

编辑:该行中还有一个潜在的 NULL 取消引用崩溃while(temp1->next!=NULL)。下面的代码显示了sortlist避免这种情况的潜在实现。

void sortlist()
{
    struct node *ptr=head;
    while(ptr!=NULL) {
        struct node *next;
        if (ptr == NULL)
            return;
        next = ptr->next;
        while(next!=NULL) {
            if(ptr->data > next->data) {
                int a=ptr->data;
                ptr->data=next->data;
                next->data=a;
            }
            next = next->next;
        }
        ptr=ptr->next;
    }
}
于 2013-07-23T16:40:36.347 回答
0

//最后我找到了我自己问题的答案,这就是解决方案,谢谢你的帮助伙伴

void sortlist()
{
    struct node *temp=head;
    int s;
    struct node *temp1=temp->next;

    while(temp!=NULL)
    {
        temp1=temp->next;                       
        while(temp1!=NULL)
        {
            if(temp->data > temp1->data)
            {
                s=temp->data;
                temp->data=temp1->data;
                temp1->data=s;
            }
            temp1=temp1->next;
        }
        temp=temp->next;
    }
}
于 2013-07-29T06:39:46.560 回答
0

我对代码进行了更改并添加了更改的注释

void sortlist()
{

    // struct node *a; /* this is not required. */

    /* NULL checks are required,if head is NULL,head->next will crash.*/
    if(head == NULL || head->next == NULL) return;

    struct node *temp=head;

    struct node *temp1=head->next;

    while(temp!=NULL)
    {
        while(temp1->next!=NULL)
       {

           if(temp->data > temp1->data)
           {
                /* assuming you data is integer*/
                int d=temp->data;
                temp->data=temp1->data;
                temp1->data=d;
           }
           //else /* else is not required, better to remove it.*/
           //{
                temp1=temp1->next;
           //}
       }
    temp=temp->next;
    }
}
于 2013-07-23T16:49:35.197 回答