按c字母顺序对电影标题的链接列表内容进行排序

时间:2019-02-27 17:11:13

标签: 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;
        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

1 个答案:

答案 0 :(得分:2)

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

通过这种方式,您不必复制字符串,而只需要四处移动即可。知道如何移动这些链接的一个好方法是拿一支铅笔和一张纸并模拟要排序的列表。这需要时间,但您最终会从中学到很多东西!

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