C ++按升序排序链表

时间:2015-04-23 04:01:56

标签: c++

这是我的代码。我想知道它为什么不起作用。

sll_node *sortList(sll_node *head)
{

 int temp=head->value;
 if(head!=NULL||temp>head->next->value)
 {
     head->value=head->next->value;
     head->next->value=temp;
 }
 else
 {
    sortList(head->next);
    sortList(head->next->next);
    sortList(head->next);
 }        
  return head;
}

1 个答案:

答案 0 :(得分:0)

您所显示的代码中的主要问题是您在使用指针之前知道它们是否有效。

因此,在您将temp指定给head->值或使用head-> next之前,您必须确保head不等于NULL。在使用head-> next-> value或head-> next-> next之前,你必须确保head-> next不等于NULL。

试试这个:

sll_node *sortList(sll_node *head)
{
    if(head != NULL)
    {
        int temp=head->value;
        if (head->next != NULL)
        {
            if (temp > head->next->value)
            {
                head->value=head->next->value;
                head->next->value=temp;
            }
            else
            {
                sortList(head->next);
            }
        }
    }
    return head;
}    

运行此问题后会遇到另一个问题。

如果您的清单是:[3,2,1,4]
第一次通过排序列表将:[2,3,4,4] 第二遍将导致:[2,1,3,4]
第三次也是最后一次传递将导致:[2,1,3,4]

我会让你尝试解决下一步。如果你有更多的努力,我会回答具体的问题。