我正在解决这个问题,将Kth返回到单链表的最后一个元素
我正在尝试实现这个通过引用传递值的C解决方案。并在Objective C中通过指针
传递目前代码无限运行,我不确定在Objective C中通过指针
是否可行C ++示例代码优先
答案 0 :(得分:1)
出于好奇,你为什么要在Obj-C中这样做呢?您可以使用C ++进行编译。我问,因为你似乎没有掌握通过引用和指针传递。另外,如果您确实想在Obj-C中执行此操作,您仍然可以通过引用传递。
在任何情况下,您的代码都会遇到一些问题:
head
代替head->next
以下完整代码。我没有编译或仔细检查它是否真的运行。基于对代码的视觉检查和您提供的示例。
- (Node *)nthToLast:(int)k withHead:(Node *)head andCounter:(int *)i {
// If Node is an Obj-C class, then use nil
// If Node is a C++ struct/class then use NULL
// If you have c++11 and it is a C++ struct/class use nullptr
if (head == nil) {
return nil;
}
Node *nd = [self nthToLast:k withHead:head->next andCounter:i];
// I've pulled the value in count to make it clear what is being done
// i++ is pointer arithmetic, which is not what you want to do here
int count = *i;
++count;
*i = count;
if (count == k) {
return head;
}
return nd;
}
- (Node *)nthToLast:(int)k withHead:(Node *)head {
int i=0;
return [self nthToLast:k withHead:head andCounter:&i];
}
答案 1 :(得分:1)
一小时后我发现了同样的事情。让我们看看我是否可以在你的工作模式中解释这个......
循环的直接问题是你传入 i 的地址,但是然后使用该值就好像它是变量的值一样。因此,你一步一步地通过记忆,一次一个词,寻找一些恰好等于 k 的词。这不太可能发生。相反,尝试
i* = i* + 1;
if (i* == k) {
...
或将其折叠为:
if (++(i*) == k) return head;
我认为您可以在没有进一步帮助的情况下修复 head-> next 问题。
如果 使用了打印语句,那么你应该在内部调用中看到一个明显的效果: i 的“值”应该是一个很大的数字,每次迭代增加4。当你认为你正在递增时,4的步长是一个巨大的提示,你已经陷入了指针运算。