您的位置:首页 > 其它

单向链表(五) 按值查找节点,返回一个链表

2014-08-01 08:09 288 查看
1、情景:有一个值value,需要知道他在链表中的位置,显然这个位置并不一定是唯一的,可能有许多个符合的位置。

2、所以用一个链表来存储这些符合的位置,并返回。

3、实现函数:

tagNode* SearchNodeByValue(tagNode *pHead, int value)
{
tagNode *pTemp = pHead;
tagNode *pLocation = NULL;
tagNode *pNewHead = NULL;
int nCount = 1;
bool bFlag = true;

if (pHead == NULL)
{
printf("链表为空!\n");
return 0;
}

while (pTemp)
{
if (pTemp->value == value)
{
if (bFlag)
{
pLocation = (tagNode *)malloc(sizeof(tagNode));
pLocation->pNext = NULL;
pLocation->value = nCount;
bFlag = false;
}
else
{
pNewHead = (tagNode *)malloc(sizeof(tagNode));
pNewHead->value = nCount;
pNewHead->pNext = pLocation;
pLocation = pNewHead;
}
}
pTemp = pTemp->pNext;
nCount++;
}

return pNewHead;
}
说明:当一个也查不到时,返回NULL

注意:别忘了释放链表

4、main函数中调用:

int _tmain(int argc, _TCHAR* argv[])
{
tagNode *p = NULL;
tagNode *pTemp = NULL;
p = CreateLinkedList();
int location;
int value;

printf("\n\n遍历:\n");
TraverseNodes(p);

printf("\n\n请输入要查找的值:");
scanf("%d", &value);
getchar();
pTemp = SearchNodeByValue(p, value);

printf("\n\n遍历查找的值所在的位置:\n");
TraverseNodes(pTemp);
FreeLinkedList(pTemp);

printf("\n\n遍历:\n");
TraverseNodes(p);

FreeLinkedList(p);

getchar();
return 0;
}


5、运行结果:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐