在字母顺序的电影标题中按字母顺序排列链接的列表内容



我试图以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

使用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;
}

这样,您不必复制围绕的字符串,而这些字符串可能比简单地移动节点更长。知道如何移动这些链接的一个好方法是抓住一支铅笔和一张纸,并模拟列表进行排序。它需要时间,但您最终从中学到了很多东西!

没有更多信息,很难知道您面临哪些问题。祝你好运!

最新更新