在C中搜索链接列表

时间:2014-02-20 20:34:56

标签: c list

我正在尝试搜索c中的链接列表,我可以将其与第一个节点匹配我的搜索字符串但不是下一个任何想法。这是我的代码:

void fnSearchList(struct listnode *ptrH, char strName[50])
{
    struct listnode *ptrTemp = ptrH;
    int nCount = 0;
//  nRet = strcmp(strName, ptrH->arcFirstName);
//  printf("%i", nRet);
    if(!ptrH)
    {
        /* Empty List */
        printf("\n\nEmpty List \n\n");
    }
    else
    {
        while(ptrTemp->ptrNext)
        {
            nRet = strcmp(strName, ptrTemp->arcFirstName);
            if(nRet == 0)
            {
                printf("The value %s has been located\n", ptrTemp->arcFirstName);
                nCount++;
            }
            ptrTemp = ptrTemp->ptrNext;
        }

        if(!nCount)
            printf("\t\tValue not found within the list\n");
        else
            printf("\t\tA total of %d were found\n", nCount);
    }   
    printf("The list totals %d\n", fnTotalList(ptrH));
}

我在测试时已标记了一些内容,以确定strcmp是否正常工作。

3 个答案:

答案 0 :(得分:2)

我认为你的while循环应该是:

while (ptrTemp)

否则它看起来不会是列表中的最后一个元素

答案 1 :(得分:1)

检查while循环的条件应为while(ptrTemp)而不是while(ptrTemp->ptrNext)。这是因为您已经通过执行

ptrTemp更改为指向列表中的下一个节点
ptrTemp = ptrTemp->ptrNext;

因此,您的代码会跳过列表中的最后一个节点,因为lastNode->ptrNext == NULLtrue。 另请注意,函数strName的{​​{1}}参数是fnSearchList类型的指针,而不是50 char的数组。你可以把它写成:

char

它们完全一样。

答案 2 :(得分:1)

更改

while(ptrTemp->ptrNext)  

while(ptrTemp)