2015-04-23 154 views
-2

这是我的code.I想知道为什么它不起作用。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

你可以请指定你的意思是**“它不工作。”** –

+1

请使用调试器。上述代码中的问题不是太深奥。运行一个小列表,并在其上运行'sortList's操作会显示答案。 – Pradhan

+2

或者刚开始添加打印语句,这应该足以解决这个问题。在你已经解除引用'head'之后,你正在检查'NULL' *。 – Praetorian

回答

0

你已经显示的代码中的主要问题是你知道它们是否有效之前使用指针。因此,在你可以指定temp-> head-> value或使用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,1,4]
第二遍将导致:[2, 1,3,4]
第三个也是最后一个通过会导致:[2,1,3,4]

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