使用【C++】写【在带头节点单链表L中第i个结点,如果找到返回该节点的地址,否则返回NULL】的代码
时间: 2024-09-19 17:04:53 浏览: 53
C++实现单链表删除倒数第k个节点的方法
在C++中,为了在单链表中查找指定位置的节点,你需要遍历链表直到找到目标位置,或者到达链表尾部。这里是一个示例,假设我们有一个单链表节点类`ListNode`:
```cpp
#include <iostream>
using namespace std;
// 定义链表节点
struct ListNode {
int val;
ListNode* next;
ListNode(int x) : val(x), next(nullptr) {} // 构造函数
};
// 查找第i个节点的函数
ListNode* findNthFromEnd(ListNode* head, int i) {
ListNode* slow = head; // 指向当前节点
ListNode* fast = head; // 指向前两个节点
// 如果索引小于零或链表为空,直接返回nullptr
if (i < 0 || !head) {
return nullptr;
}
// 快慢指针法,快指针移动两步,慢指针移动一步
while (i > 0) {
fast = fast->next;
i--;
}
// 当快指针到达链表尾部时,慢指针的位置就是链表长度减去i的位置
while (fast && fast->next) {
fast = fast->next;
slow = slow->next;
}
// 返回慢指针,即第i个节点
return slow;
}
int main() {
ListNode* L = new ListNode(1);
L->next = new ListNode(2);
L->next->next = new ListNode(3); // 创建一个示例链表
int i = 2; // 要查找的位置
ListNode* result = findNthFromEnd(L, i);
if (result) {
cout << "Found node at position " << i << ": " << result->val << endl;
} else {
cout << "Node not found at position " << i << endl;
}
return 0;
}
```
这段代码通过快慢指针的方式找到第i个节点,如果找到就返回节点地址,找不到则返回NULL。
阅读全文