搜索链表
Searching a Linked List
下面我有一个带有搜索功能的链表。此函数不仅搜索列表中的元素,还设置上一个节点的地址,稍后将在删除函数中使用。如果在列表中找到该值,将返回节点的地址,否则前一个节点为 null,函数返回 null。我收到分段错误,但不确定原因。有人可以向我解释为什么吗?谢谢。
struct IntNodeType {
int value;
IntNodeType * next;
IntNodeType (int v=0, IntNodeType * p=NULL):value(v),next(p)
{
}
};
IntNodeType * Search (IntNodeType * firstNodePtr, int value,
IntNodeType * & prevNode)
{
IntNodeType * cur;
IntNodeType * prev;
cur = firstNodePtr;
prev = prevNode;
while (cur!=NULL)
{
if (cur->value==value)
{
prev -> next = cur;
return cur;
}
cur = cur->next; //update p with the current node's next field
}
prevNode = NULL;
return NULL;
}
此函数有 3 种情况:
-
您尝试查找的值位于第一个节点中,可以使用简单的 if 语句
if(curr->value==value){return curr;}
进行测试。我猜这种情况不是这里需要的,因为它没有指向它的先前节点,除非问题中另有说明。 -
该值位于列表的中间。在这种情况下,您应该声明两个指针,但是,prev 指针应指向第一个节点,curr 应指向 pre->next
curr=pre->next
。现在在循环中,如果找到该值return curr;
否则将每个指针移动到下一个节点pre=pre->next
并curr=curr->next
。 -
找不到该值,并在代码中正确执行。
现在回到你的代码。您应该确保前节点未设置为 NULL,因为这会在尝试设置其下一个节点时导致错误。此外,pre 和 curr 应该同时遍历,这样在设置pre->next
时就不会丢失节点之间的连接。
相关文章:
- 为什么当我尝试搜索双链表中第一个数据条目之外的数据时,程序崩溃了?
- Sinlge 链表,C++,删除所有和搜索功能的问题
- 这是在传递 int num 时创建搜索函数的正确方法吗?使用链表库
- 快速搜索链表未编译,需要返回语句
- 搜索链表时出现隔离错误
- 双向链表插入方法实现 - 正在搜索哪个节点
- 不太确定如何从这里继续前进.是否使用链表进行搜索
- 在双向链表中搜索
- 搜索链表
- C++有序链表搜索函数算法逻辑
- 链表中的搜索功能 - C++
- 有没有人知道如何在C++的链表上运行插值搜索
- 双链表并使用反向搜索
- 如何使用信号和插槽从qt表单中获取id,然后在链表中搜索它并使用另一个表单显示结果
- 链表中的线性搜索[语言:C++编译器:Dev Cpp 4.9.9.2]
- 将节点插入二进制搜索树/链表
- C++链表搜索错误:STATUS_ACCESS_VIOLATION
- 正在搜索“链表”是否为空
- 使用c++在链表中搜索操作
- 有序双链表搜索