gpt4 book ai didi

c - 从c中的末尾获取链表中的节点值

转载 作者:行者123 更新时间:2023-11-30 14:55:17 25 4
gpt4 key购买 nike

我正在做这个黑客排名问题( https://www.hackerrank.com/challenges/get-the-value-of-the-node-at-a-specific-position-from-the-tail )我的代码如下 -

int GetNode(Node *head,int positionFromTail)
{
Node *prev = NULL;
Node *current = head;
Node *next;
while(current!=NULL){
next = current->next;
current->next = prev;
prev = current;
current = next;
}
head = prev;
int p=0;
while(head->next!=NULL){
if(p== positionFromTail){
return head->data;
}
else {
p++;
head= head->next;
}
}
}

所以我所做的是,我首先反转链表,然后循环到特定位置,然后打印它的值。这是正确的方法吗?它给了我这个错误。

  solution.cc: In function ‘int GetNode(Node*, int)’:
solution.cc:42:1: error: control reaches end of non-void function [Werror=return-type]
}
^
cc1plus: some warnings being treated as errors

最佳答案

由于以下限制,问题语句使得代码不可能在不返回值的情况下到达函数末尾:

Constraints

Position will be a valid element in linked list.

但是,C 编译器不知道您的 while 循环在到达 NULL 时永远不会退出,从而保证 return head->data 是最终执行,因此会发出错误。

您可以通过在末尾提供未使用的return 或使循环无限来解决此问题。

注意:您的解决方案颠倒了列表,这可能不是最佳的。当您遍历列表一次时,您可以通过将 positionFromTail + 1 尾随项存储在数组中来避免反转:

int GetNode(Node *head,int positionFromTail) {
int data[++positionFromTail], p = 0;
while (head) {
data[p] = head->data;
head = head->next;
p = (p+1) % positionFromTail;
}
return data[p];
}

关于c - 从c中的末尾获取链表中的节点值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45985485/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com