f*****C 发帖数: 84 | 1 能不能做到O(N)TIME O(1)SPACE??
java好像不能pass by value吧,像c/cpp那样操作指针会把current.next指向null(
prev)
有木有办法实现?? |
f********c 发帖数: 147 | 2 java所有都是pass by value吧,没有pass by reference
另外这个用 头插法 很容易的吧,连recursion都不用的 |
n******n 发帖数: 12088 | 3 说反了。
【在 f********c 的大作中提到】 : java所有都是pass by value吧,没有pass by reference : 另外这个用 头插法 很容易的吧,连recursion都不用的
|
f*****C 发帖数: 84 | 4 比如
public class Foo{
public void foo(List list){
lalalala(list);
}
public void lalalala(List list){
list.clear();
}
}
这样的话foo里面的list也会被清空啊,不是把list指向的地址传给lalalala吗?两个
list指向的是同一个地址
头插法是神马?? 我看的geeksforgeeks上面的c解法 然后想用java实现 发现里
面有个传值prev实现不了
【在 f********c 的大作中提到】 : java所有都是pass by value吧,没有pass by reference : 另外这个用 头插法 很容易的吧,连recursion都不用的
|
z******y 发帖数: 444 | 5
现在的官方说法是java无论是primitive还是reference类型都是pass by value,只不
过对于reference类型这个value是reference value
【在 f*****C 的大作中提到】 : 比如 : public class Foo{ : public void foo(List list){ : lalalala(list); : } : public void lalalala(List list){ : list.clear(); : } : } : 这样的话foo里面的list也会被清空啊,不是把list指向的地址传给lalalala吗?两个
|
f********c 发帖数: 147 | 6 是的,所有都是pass by value,对于object,传递的是reference 这个value,就像C+
+的pointer.
【在 z******y 的大作中提到】 : : 现在的官方说法是java无论是primitive还是reference类型都是pass by value,只不 : 过对于reference类型这个value是reference value
|
f********c 发帖数: 147 | 7 Java所有都是pass by value,只不过有时候这个value is reference
【在 n******n 的大作中提到】 : 说反了。
|
f********c 发帖数: 147 | 8 是的,这个情况是把list的reference传递了,这种情况仍然是pass by value,只不过
这个value是个reference,就像c++里面的Pointer,是原来list reference的一个copy
。如果你在lalalala里面改变这个reference,它就指向其他的obj了,和foo里面的
list一点关系都没有了,你可以试试。
java code:
public void reverse(ListNode root) {
ListNode curr = root;
ListNode prev = null;
while(curr != null) {
ListNode next = curr.next;
curr.next = prev;
prev = curr;
curr = next;
}
root = prev;
}
【在 f*****C 的大作中提到】 : 比如 : public class Foo{ : public void foo(List list){ : lalalala(list); : } : public void lalalala(List list){ : list.clear(); : } : } : 这样的话foo里面的list也会被清空啊,不是把list指向的地址传给lalalala吗?两个
|
f*****C 发帖数: 84 | 9 我试过这个 root会只含reverse之前的第一个值 不过prev是含有reverse的
ListNode 我就把这个method return type变成了ListNode 然后return prev了
java 8 在intellij community version运行的...
不知道是不是java8的问题 这样直接assign reference好像不行了...
copy
【在 f********c 的大作中提到】 : 是的,这个情况是把list的reference传递了,这种情况仍然是pass by value,只不过 : 这个value是个reference,就像c++里面的Pointer,是原来list reference的一个copy : 。如果你在lalalala里面改变这个reference,它就指向其他的obj了,和foo里面的 : list一点关系都没有了,你可以试试。 : java code: : public void reverse(ListNode root) { : ListNode curr = root; : ListNode prev = null; : while(curr != null) { : ListNode next = curr.next;
|