我有一个歌曲库,用户可以在其中输入歌曲,并成为一个链接列表,但是无法插入有序列表。
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) {
对于要比较指针而不是字符串本身的其他语句,也是如此。
那就是您应该使用标头
strcmp
中声明的标准C函数<string.h>
来比较字符串而不是指针。同样在这个循环中
while (current -> link != NULL && songName <= current -> link -> songName)
current = current -> link;
条件
songName <= current -> link -> songName
错误。 current -> link -> songName
小于或等于songName
时,循环必须迭代。因此它应该看起来像
while (current -> link != NULL && strcmp( songName, current -> link -> songName ) >= 0 )
current = current -> link;