c - 创建链表头的问题
问题描述
我的代码旨在从哈希链表中读取一系列字符串,将它们全部转换为小写,将它们放入一个数组中以对其使用快速排序,然后将它们放入一个称为字数的数据结构中,其中包括单词以及如何很多时候它出现在文档中。目前,当我运行代码时,它会使用我正在使用的打印语句正确打印出来,但是当我打印出来时,head 总是设置为 null。
这是 wordCount 声明:
typedef struct wordCount
{
int count;
char *word;
struct wordCount* next;
} wordCount;
这是应该执行我上面描述的方法段。
else
{
char *toSort[curSize];
int linkedListTraverse = 0; //Array index for each linked list node
while(linkedList != NULL)
{
toSort[linkedListTraverse] = (char*) malloc(sizeof(linkedList->string));
strcpy(toSort[linkedListTraverse],linkedList->string); //Copy the data from the linked list into an array
linkedList = linkedList->next;
linkedListTraverse++;
}
int i = 0;
while(i < curSize) //Convert all of the words to lowercase
{
char* str = toSort[i];
char *p;
for (p = str; *p != '\0'; p++)
*p = (char)tolower(*p);
i++;
}
i = 0;
qsort(toSort, curSize, sizeof(char*), stringCmpFunc); //Sort the current node
while(i < curSize)
{
printf("%s\n", toSort[i]);
i++;
}
int curWordIndex = 0;
int checkWordIndex = 1;
wordCount *wordHead = NULL;
wordCount *curWord = wordHead;
while(curWordIndex < curSize)
{
curWord = (wordCount*) malloc(sizeof(wordCount));
curWord->word = toSort[curWordIndex]; //Set the word
curWord->count = 1; //Start the count out at 1
while(strcmp(toSort[curWordIndex], toSort[checkWordIndex]) == 0) //While the two words are equal
{
checkWordIndex++; //Advance the leading index check
curWord->count++;
if(checkWordIndex >= curSize) //If the leading index goes beyond the array bounds
break;
}
if(checkWordIndex < curSize)
{
curWordIndex = checkWordIndex;
checkWordIndex = curWordIndex + 1;
}
if(checkWordIndex >= curSize) //If the leading index goes beyond the array bounds
{
if(strcmp(curWord->word, toSort[curWordIndex]) != 0)
{
printf("%s %d\n", curWord->word, curWord->count);
curWord = curWord->next;
curWord = (wordCount*) malloc(sizeof(wordCount));
curWord->word = toSort[curWordIndex]; //Set the word
curWord->count = 1; //Start the count out at 1
}
break;
}
//printf("CurWordIndex: %d\n CheckWordIndex: %d\n",curWordIndex, checkWordIndex);
printf("%s %d\n", curWord->word, curWord->count);
curWord = curWord->next; //Advance to the next node in the linked list
}
printf("%s %d\n", curWord->word, curWord->count);
这是只打印 null 的代码段
curWord = wordHead;
while(curWord != NULL)
{
printf("%s %d\n", curWord->word, curWord->count);
curWord = curWord->next;
}
解决方案
放
if (wordHead == NULL) { wordHead = curWord; }
后
curWord = (wordCount*) malloc(sizeof(wordCount));
更新
这是另一个问题:
curWord = curWord->next;
curWord = (wordCount*) malloc(sizeof(wordCount));
它应该是:
curWord->next = (wordCount*) malloc(sizeof(wordCount));
curWord = curWord->next;
注意:请遵守规则,这将有助于我们为您提供帮助。
更新/2
替换这个:
while(curWordIndex < curSize) {
curWord = (wordCount*) malloc(sizeof(wordCount));
有了这个:
while(curWordIndex < curSize) {
wordCount* tmp = (wordCount*) malloc(sizeof(wordCount));
if (curWord) { curWord->next = tmp; }
curWord = tmp;
推荐阅读
- android - TextView 没有出现在模拟器和真实设备上
- excel - 如何在 VBA 代码中将名称范围用于新图表系列的值和 X 值?
- git - 添加第二个远程删除的文件
- django-templates - 编写测试时 Circle CI 的 Django 模板错误
- omnet++ - omnet ++ 程序,执行此消息时,模块中出现错误(cModule)
- pkcs#11 - PKCS11 将私有 RSA 密钥解包到 eToken HSM
- angular - 是否可以在角度 2 中读取其他应用程序的本地存储?
- laravel - 使用 Mix/Webpack 将 quill.js 导入 Laravel
- svn - 需要帮助使用 Cake 对 SVN 存储库进行身份验证
- sql - 使用文件时向表中插入数据时触发器无法捕获