单向链表(五) 按值查找节点,返回一个链表
2014-08-01 08:09
288 查看
1、情景:有一个值value,需要知道他在链表中的位置,显然这个位置并不一定是唯一的,可能有许多个符合的位置。
2、所以用一个链表来存储这些符合的位置,并返回。
3、实现函数:
注意:别忘了释放链表
4、main函数中调用:
5、运行结果:
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、运行结果:
相关文章推荐
- 从尾部查找一个单向链表的第几个节点。(4)
- 今天开始学Java 输入一个单向链表和一个节点的值,从单向链表中删除等于该值的节点,删除后如果链表中无节点则返回空指针。
- 查找单向链表中倒数第K个节点
- 给定一个单向链表,目前已经有一个指针,指向某一个节点(记作A),现在要删除这个节点A,如何操作。
- 华为OJ 向升序单向链表中插入一个节点
- 坚持坚持!用Java写出删除一个链表的倒数第N个节点,并返回头节点(N总是可达的)
- 给出一个单向链表的头指针,输出该链表中倒数第K个节点的指针
- 单向链表中,如何在给定节点前快速插入一个节点?
- 随机返回一个链表的节点
- Cracking coding interview(2.2)返回单向链表的倒数第n个节点
- C实现简单单向链表,一次遍历查找倒数第k个节点的值
- 向升序单向链表中插入一个节点
- 给出一个单向链表的头指针,输出该链表中倒数第K个节点的指针
- 输入一个单向链表,输出该链表中倒数第 k 个节点
- 二叉树查找不严格小于一个值的最大值(返回节点)。
- 每天一道算法题7 查找链表中倒数第k个结点 ; 输入一个单向链表。如果该链表的结点数为奇数,输出中间的结点;如果链表结点数为偶数,输出中间两个结点前面的一个
- 单向链表环测试并返回环起始节点
- 建立一个带附加头结点的单链表.实现测长/打印/删除结点/插入结点/逆置/查找中间节点/查找倒数第k个节点/判断是否有环
- 复习下C 链表操作(单向循环链表、查找循环节点)
- 单向链表中,如何在给定节点前快速插入一个节点?