【发布时间】:2019-07-21 11:58:19
【问题描述】:
我试图在 c 中按字母顺序对电影标题的链接列表进行排序,但我无法弄清楚。这是我目前所拥有的:
ReviewNode *sortReviewsByTitle(ReviewNode *head)
{
char tempTitle[MAX_STR_LEN];
ReviewNode *p = NULL;
ReviewNode *temp = NULL;
p = head;
while (p!= NULL){
temp = p;
while(temp->next != NULL){
if(strcmp(temp->review.movie_title, temp->next->review.movie_title) > 0){
strcpy(tempTitle, temp->review.movie_title);
strcpy(temp->review.movie_title, temp->next->review.movie_title);
strcpy(temp->next->review.movie_title, tempTitle);
}
temp = temp->next;
}
p = p ->next;
}
return head;
我的一个测试用例:排序:c、b、a 并返回 b、a、c
【问题讨论】:
-
请解释为什么您通过复制节点的内容来对链表进行排序。链表的重点不是这样做,而是进行指针操作。在这种特殊的字符串情况下,您会面临许多与不同长度相关的风险;诚然不是你的三个同样长的“a”、“b”、“c”的例子 - 但问题迟早会找到你......
-
您正在比较
*temp和*temp->next您应该比较*p和*temp而且,您可以将while循环重写为for()loops,节省 3 行,并且避免很多可能的错误。