我无法将指向指针的指针作为Java中函数的参数传递。我知道Java没有指针而是传递对象的引用。我想知道这是怎么做的。 为了清除我的怀疑,我正在粘贴我正在实现的程序的代码片段。
在以下程序中,我从“QuickSortRecur”方法调用方法“Partition”。 由于我大部分时间都在C上工作,所以我不知道如何将参数 newHead 和 newEnd 作为指针指向。
我还提到了以下几行的C等价物,我只是想知道如何在Java中实现相同的功能?
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);
}
答案 0 :(得分: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
个对象数组。
答案 1 :(得分: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;
}
}