一道算法题的启发:在链表list里面添加值,然后把list链表添加进res链表中,在做算法题的时候,平时使用res.add(list)
,结果发现输出打印为空:
// 记录所有路径
List<List<Integer>> res = new LinkedList<>();
/* 图的遍历框架 */
void traverse(int[][] graph, int s, LinkedList<Integer> path) {
// 添加节点 s 到路径
path.add(s);
int n = graph.length;
// 到达终点
if(n-1 == s){
//深拷贝
res.add(new LinkedList<>(path));
path.removeLast();
return;
}
// 递归每个相邻节点
for(int g:graph[s]){
traverse(graph,g,path);
}
// 从路径移出节点 s
path.removeLast();
}
深拷贝与浅拷贝是有区别的!
深拷贝:开辟一个独立地址,地址中存放的内容为list链表,后续list的变化不会影响到res。
浅拷贝:将res尾部指向了list地址,后续list内容的变化会导致res的变化,所以res输出为空。
参考
https://blog.csdn.net/weixin_42707971/article/details/107609388