c-插入节点并按字母顺序排列



我有一个歌曲库,用户将在其中输入歌曲,并将成为一个链表,但我插入到有序列表中的操作不起作用。

Node *insertIntoOrderedList(Node *head, char *songName, char *artist, char *genre) {
if (head == NULL || songName < head -> songName) {
    return newNode(songName, artist, genre, head); // a new head of the list
}
Node *current = head;
while (current -> link != NULL && songName <= current -> link -> songName)
    current = current -> link;
current -> link = newNode(songName, artist, genre, current -> link);
return head;

}

现在当我打印链接列表时,它将按照我输入它们的顺序,所以如果我输入B、A、C,当我打印列表时,将是BAC而不是ABC。

问题是比较指针,而不是比较指针指向的字符串。

例如,在这个声明中,我认为应该有

if (head == NULL || strcmp( songName, head -> songName ) < 0 ) {

而不是

if (head == NULL || songName < head -> songName) {

这同样适用于比较指针而不是字符串本身的其他语句。

也就是说,应该使用标头<string.h>中声明的标准C函数strcmp来比较字符串,而不是指针。

同样在这个循环中

while (current -> link != NULL && songName <= current -> link -> songName)
    current = current -> link;

条件CCD_ 3是错误的。当current -> link -> songName小于或等于songName时,循环必须迭代。

因此,它应该看起来像

while (current -> link != NULL && strcmp( songName, current -> link -> songName ) >= 0 )
    current = current -> link;

相关内容

  • 没有找到相关文章

最新更新