单链表查找第K个元素
为什么一直报错呢
不理解为啥,感觉都考虑了吧。
让阿豪来帮你解答,本回答参考chatgpt3.5编写提供,如果还有疑问可以评论或留言问题描述: 单链表查找第K个元素时出现错误,但不知道原因。 解答: 从提供的代码出发,我可以看到以下问题:
struct ListNode {
int val;
ListNode *next;
ListNode(int x) : val(x), next(NULL) {}
};
版本一: 查找第K个节点的函数实现:
ListNode* getKthNode(ListNode* head, int k) {
if (!head || k < 1) {
return nullptr;
}
ListNode* p1 = head;
for (int i = 1; i < k; ++i) {
p1 = p1->next;
if (!p1) {
return nullptr; // 超出链表长度
}
}
return p1;
}
版本二: 另外一个实现方式:
ListNode* getKthNode(ListNode* head, int k) {
if (!head || k < 1) {
return nullptr;
}
ListNode *p1, *p2;
p1 = p2 = head;
for (int i = 0; i < k - 1; ++i) {
if (!p2->next) {
return nullptr; // 超出链表长度
}
p2 = p2->next;
}
while (p2->next) {
p1 = p1->next;
p2 = p2->next;
}
return p1;
}
以上是两种实现方式,分别遍历K个节点和遍历整个链表,根据不同需求可以选择实现方式。 在使用的时候,要注意输入的K值所在区间,否则会返回空指针。