将Java代码转换为Objective-C代码?

时间:2014-02-16 16:20:31

标签: java objective-c converter

任何人都可以帮助我将以下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;
}

由于

2 个答案:

答案 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