C 按电影标题的字母顺序对链接列表内容进行排序
我试图用c语言按字母顺序对电影标题的链接列表进行排序,但我搞不懂。这就是我到目前为止所做的:C 按电影标题的字母顺序对链接列表内容进行排序,c,list,sorting,C,List,Sorting,我试图用c语言按字母顺序对电影标题的链接列表进行排序,但我搞不懂。这就是我到目前为止所做的: ReviewNode *sortReviewsByTitle(ReviewNode *head) { char tempTitle[MAX_STR_LEN]; ReviewNode *p = NULL; ReviewNode *temp = NULL; p = head; while (p!= NULL){ temp = p; wh
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,而不是使用strcpy,为什么不简单地移动节点的指针呢?如果是单链接列表,则需要一个before节点,它是temp节点的前一个节点,因此在执行temp=temp->next时,首先执行before=temp。这是处理双链接节点的方法:
if (strcmp(/*...*/) > 0) {
ReviewNode *swap = temp->next;
temp->next = swap->next;
swap->prev = temp->prev;
swap->next = temp;
temp->prev = swap;
}
通过这种方式,您不必复制字符串,这可能比简单地移动节点要花费更长的时间。了解如何移动这些链接的一个好方法是抓起一支铅笔和一张纸,模拟正在排序的列表。这需要时间,但最终你会从中学到很多
如果没有更多的信息,就很难知道你面临着什么问题。祝你好运 您介意发布一个链接吗?请解释为什么您要通过复制周围节点的内容来对链接列表进行排序。链表的要点不是这样做,而是做指针操作。在字符串的这种特殊情况下,您将面临与不同长度相关的许多风险;诚然,对于三个同样长的a、b、c的例子来说,情况并非如此,但问题迟早会出现……您正在比较*temp和*temp->下一步您应该比较*p和*temp,您可以将while循环重写为forloops,节省3行代码,并避免许多可能的错误。