0

我无法将指向指针的指针作为参数传递给 Java 中的函数。我知道 Java 没有指针,而是我们传递对对象的引用。我想知道这是怎么做到的。为了清除我的疑问,我正在粘贴我正在实施的程序的代码片段。

在下面的程序中,我从方法“QuickSortRecur”调用方法“Partition”。由于我大部分时间都在使用 C,我不知道如何将参数newHeadnewEnd作为指针发送

我还提到了以下几行的 C 等效项,我只想知道如何在 Java 中实现相同的功能?

爪哇:

public ListNode Partition(ListNode lhead,ListNode lend,ListNode newHead,ListNode newEnd){
         ---------
         ---------
         ---------

    }
public ListNode QuickSortRecur(ListNode lhead,ListNode lend){
    ListNode newHead=null;
    ListNode newEnd=null;
    ListNode pivot;     

    pivot=Partition(lhead,lend,newHead,newEnd);
    if(newHead==null)
            {
            System.out.println("This is not updated ");
            }
       }

C 等效于上述签名:

struct node *partition(struct node *head, struct node *end,
                       struct node **newHead, struct node **newEnd){
}

struct node *quickSortRecur(struct node *head, struct node *end)
{
struct node *pivot = partition(head, end, &newHead, &newEnd);
}
4

2 回答 2

3

考虑到 C 的指针粗略地等同于 Java 的引用,粗略地等同于指向指针的指针将是封装引用的可变类。

例如,您可以构建如下内容:

class ListNodeReference {
    private ListNode node;
    public ListNode getNode() {
        return node;
    }
    public void setNode(ListNode theNode) {
        node = theNode;
    }
}

您可以传递ListNodeReference给一个函数,该函数可以使用它的 get 和 set 方法获取或设置它,这与 C 程序使用单个取消引用来获取实际指针的方式非常相似(当您的代码访问时,双重取消引用会自动发生ListNode,因为它是已经是一个参考对象)。

请记住,这是一个非常粗略的等效项,而不是一对一的替换:例如,无法ListNode使用ListNodeReference.

于 2013-08-07T16:36:52.980 回答
1

我可以通过这个解决问题..

     public class LinkedList {
    public ListNode head;
    private ListNode newHead;
    private ListNode newEnd;

    LinkedList(){
        head = null;
        newHead=null;
        newEnd=null;
    }

    public ListNode getNewEnd() {
        return this.newEnd;
    }
    public void setNewEnd(ListNode newEnd) {
       this.newEnd=newEnd;
    }

    public ListNode getNewHead(){
        return this.newHead;
    }

    public void setNewHead(ListNode newHead){
        this.newHead=newHead;
    }

    public ListNode getHead(){
        return this.head;
    }
    public void setHead(ListNode head){
        this.head=head;
    }

public ListNode Partition(ListNode lhead,ListNode lend,LinkedList Ref){
        ListNode pivot=lend;
        ListNode End=lend;
        ListNode curr=lhead;
        //ListNode temp=null;
        ListNode previous=null;

        ListNode newHead=Ref.getNewHead();
        ListNode newEnd=Ref.getNewEnd();
                --------------------------
        -----implementation -----
                --------------------------

        Ref.setNewEnd(newEnd);
        Ref.setNewHead(newHead);
        return pivot;

        }
    public ListNode QuickSortRecur(ListNode lhead,ListNode lend){
        ListNode newHead=null;
        ListNode newEnd=null;
        ListNode pivot;     
        LinkedList linkRef=new LinkedList();

        pivot=Partition(lhead,lend,linkRef);
        newHead=linkRef.getNewHead();
        newEnd=linkRef.getNewEnd();




        return newHead;
    }


}
于 2013-08-07T17:09:45.153 回答