任何人都可以帮助我将以下Java代码转换为Objective-C代码。我知道Objective-C但我无法将此代码转换为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 :(得分:0)
你还没有给出什么' MyList'对象是。
但是如果您只是尝试使用任何方法反转数组,可以使用以下单行:
NSArray* reversedArray = [[array reverseObjectEnumerator] allObjects];
答案 1 :(得分:0)
代码是用于反转linked list的差算法。你可能已经转换了类的其余部分,或者拥有自己的链表类,并且只是试图复制反转算法。 你应该真正包括这些细节以及你在SO上提出问题时所尝试的内容,如果没有人们回答,通常只会猜测而你没有表现出任何努力 - 后者很重要。 < / p>
虽然这段代码强烈建议使用链表,但这个片段中没有任何线索,无论是单链表还是双链表。您提供的代码片段表示您有一个MyList
类,用于管理由ListNode
个对象组成的链接列表。
链表上的基本操作通常是:
head
,它是ListNode
类型的对象引用;它本身似乎有一个字符串。getNext
&amp; 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