2014-02-16 73 views
-2

任何人都可以幫助我將以下Java代碼轉換爲Objective-C代碼。我知道Objective-C,但我無法將此代碼轉換爲Objective-C。將Java代碼轉換爲Objective-C代碼?

這是Java代碼。

public MyList RecReverse() { //my attempt at the recursive method 
    if (head.getNext() == null) { 
     return this; 
    } 

    MyList remainder = new MyList(); 
    remainder.head = head.getNext(); // New list has rest of this list (after head) 
    ListNode temp = new ListNode(head.getString()); // save the first thing in list 

    remainder = remainder.RecReverse(); //reverse the things in the new 2nd part list 

    remainder.end().setNext(temp); // put old head on the end 

    return remainder; 

} 

private ListNode end() { 
    ListNode curr = head; 
    while (curr.getNext() != null) { 
     curr = curr.getNext(); 
    } 
    return curr; 
} 

感謝

+0

我下載了一個工具j2objc-master,我試圖解決它,但沒有用。 –

+1

看起來像這個代碼「嘗試」恢復鏈接列表的順序。爲什麼不使用API​​中包含的東西?你有沒有研究,如果有一些功能呢? – qqilihq

+0

你能解釋一下嗎,所以我可以在我的代碼中做到這一點 –

回答

0

的代碼用於逆轉linked list不良算法。你可能已經轉換了其餘的類,或者有自己的鏈表類,只是試圖複製反轉算法。 你應該真的包括這些細節以及你在SO上提出問題時所嘗試的內容,如果沒有他們回答,往往只能猜測,而你沒有表現出任何努力 - 後者很重要。

儘管此代碼強烈建議鏈接列表,但在此片段中是否存在此線索是否爲單鏈表或雙鏈表。您提供的代碼片段表示您有一個MyList類,它管理由ListNode對象組成的鏈接列表。

鏈表上的基本操作是典型的:

  • 訪問/修改存儲在當前節點 - 在你的代碼,這是物業head,它是ListNode類型的對象引用;這本身似乎持有一個字符串。
  • 訪問/更改對列表的其餘部分(「尾部」)的引用 - 在您的代碼中使用getNext & setNext方法。

您顯示的方法RecReverse是一種遞歸生成與當前列表相反的新列表的方法。該算法通過顛倒列表尾部,然後將頭部附加到尾部來完成 - 使用方法end

如果列表雙聯和/或保持到列表的末尾的參考則算法是確定 - end不需要遍歷在這種情況下列表中的方法。只需在Objective-C中編寫它並將其添加到列表類中即可。

如果列表是單鏈接並且不保留對列表末尾的引用,那麼算法很差,並且方法end確實需要遍歷列表。這使得它是一個O(n^2)算法 - 每一步遍歷列表。

在這種情況下更好的算法是使用積累參數的。在僞代碼中,這是:

Reverse(l) 
    if length(l) <= 1 
    then return l // empty list or list with one element reversed is itself 
    else return ReverseHelper(l, new empty list) 

ReverseHelp(remainder, result) 
    if remainder is empty 
    then return result // no more elements left to process 
    else return ReverseHelp(tail of remainder, add head of remainder to front of result) 

在Objective-C上實現並將它添加到鏈表類中。

HTH

0

你還沒有真正給定的上下文是什麼 'MYLIST' 對象。

但是,如果你只是試圖使用任何方法可能可以使用下面一行反轉的數組:

NSArray* reversedArray = [[array reverseObjectEnumerator] allObjects];