试编写一个算法,在带表头结点的单链表中寻找第i个结点。若找到,则函数返回第i个结点的地址;若找不到,则函数返回NULL。 LNode* GetANode (LNode* & HL, int i )
时间: 2024-04-09 15:28:55 浏览: 138
以下是寻找带表头结点的单链表中第i个结点的算法实现:
```cpp
#include <iostream>
using namespace std;
struct LNode {
int data;
LNode* next;
};
LNode* GetANode(LNode* HL, int i) {
if (i <= 0) {
return NULL;
}
LNode* p = HL->next;
int count = 1;
while (p && count < i) {
p = p->next;
count++;
}
if (p && count == i) {
return p;
} else {
return NULL;
}
}
int main() {
// 创建带表头结点的单链表
LNode* HL = new LNode;
LNode* node1 = new LNode;
LNode* node2 = new LNode;
LNode* node3 = new LNode;
HL->next = node1;
node1->data = 1;
node1->next = node2;
node2->data = 2;
node2->next = node3;
node3->data = 3;
node3->next = NULL;
// 寻找第i个结点并输出结果
int i = 2;
LNode* result = GetANode(HL, i);
if (result) {
cout << "第" << i << "个结点的值为:" << result->data << endl;
} else {
cout << "找不到第" << i << "个结点" << endl;
}
return 0;
}
```
这个算法会根据传入的参数i,在带表头结点的单链表中寻找第i个结点。如果找到,则返回该结点的地址;如果找不到,则返回NULL。在示例中,我们创建了一个带表头结点的单链表并调用了GetANode函数来查找第2个结点。输出结果为“第2个结点的值为:2”。
阅读全文