这是我参与「第五届青训营 」伴学笔记创作活动的第 13天
最近写算法题的时候我在想,如果new一个对象就在地址空间里开辟了一块地方,be like
import java.util.ArrayList;
import java.util.List;
public class TEST {
public static void main(String[] args) {
List a = new ArrayList(); //args
}
}
那么如果再new了一个对象b,b = a;并不是将b的地址中复制了a的所有信息,而是将b也作为指向a的地址空间的的一个引用,be like
import java.util.ArrayList;
import java.util.List;
public class TEST {
public static void main(String[] args) {
List a = new ArrayList();
List b = new ArrayList();
a.add(1);
b = a;
}
}
如果a的值变化了,那么b是其引用也会跟着改变,be like
import java.util.ArrayList;
import java.util.List;
public class TEST {
public static void main(String[] args) {
List a = new ArrayList();
List b = new ArrayList();
a.add(1);
b = a;
a.add(2);
}
}
但是如果a变成了其他地址的引用,那么b并不会改变,be like
import java.util.ArrayList;
import java.util.List;
public class TEST {
public static void main(String[] args) {
List a = new ArrayList();
List b = new ArrayList();
a.add(1);
b = a;
a = new ArrayList();
}
}
- 填充每个节点的下一个右侧节点指针 queue队列取最前面的元素用,peek()如果无元素会返回null可以解决异常问题
/*
// Definition for a Node.
class Node {
public int val;
public Node left;
public Node right;
public Node next;
public Node() {}
public Node(int _val) {
val = _val;
}
public Node(int _val, Node _left, Node _right, Node _next) {
val = _val;
left = _left;
right = _right;
next = _next;
}
};
*/
class Solution {
public Node connect(Node root) {
if (root == null) return root;
Queue<Node> queue= new LinkedList<>();
queue.offer(root);
while (!queue.isEmpty()) {
int size = queue.size();
for (int i = 0;i < size;i++){
Node temp = queue.poll();
if (i == size-1) temp.next = null;
else temp.next = queue.peek();
if (temp.left != null) queue.offer(temp.left);
if (temp.right != null) queue.offer(temp.right);
}
}
return root;
}
}