我工作的這個問題回報k到第一個單向鏈表路過指針目標C - 鏈表
的最後一個元素,我想實現其按引用傳遞的價值這款C解決方案。並通過指針
這樣做的目標C通過目前的代碼無限地運行,我不知道是否有可能在目標C路過指針
C++示例代碼首先
我工作的這個問題回報k到第一個單向鏈表路過指針目標C - 鏈表
的最後一個元素,我想實現其按引用傳遞的價值這款C解決方案。並通過指針
這樣做的目標C通過目前的代碼無限地運行,我不知道是否有可能在目標C路過指針
C++示例代碼首先
剛出於好奇,你爲什麼試圖在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];
}
我在一個小時後發現相同。讓我們看看我是否可以在您的工作模式下解釋這個...
您的循環的直接問題是,您傳遞的地址爲i,但隨後使用該值就好像它是變量的值一樣。因此,你正在隨機地步入記憶中,每次只讀一個單詞,尋找恰好等於k的單詞。這不太可能發生。相反,嘗試
i* = i* + 1;
if (i* == k) {
...
或者它崩:
if (++(i*) == k) return head;
我認爲你可以修復頭戴式>未來沒有進一步幫助的問題。
如果做使用打印語句,那麼你應該看到你內心的通話中一個生動的效果:即「價值」 我應該是一些大的幅度,在每次迭代通過增加4 。當你認爲你正在增加時,步長爲4是一個暗示你指向算術的巨大暗示。
歡迎來到StackOverflow。請閱讀並遵守幫助文檔中的發佈準則。 [最小,完整,可驗證的示例](http://stackoverflow.com/help/mcve)適用於此處。在您發佈代碼並準確描述問題之前,我們無法有效幫助您。最值得注意的是,我們無法從屏幕截圖中輕鬆再現您的問題。 – Prune
便宜的調試提示:將一個** print **語句放到每個例程的頂部。打印例程名稱和所有參數。爲了跟蹤無限遞歸,還包括一個全局計數器:在每次打印時增加,並在達到有用限制時中止程序(這裏應該是50)。 – Prune
謝謝你,這是一個好主意。我會試試:) – mparrish91