一道算法题的启发:在链表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.youkuaiyun.com/weixin_42707971/article/details/107609388
本文探讨了在算法题目中处理链表时,深拷贝与浅拷贝的区别。在将链表添加到结果链表时,由于浅拷贝可能导致结果为空。文中通过一个具体的图的遍历框架示例,解释了深拷贝如何确保链表副本不受原始链表修改的影响,并提供了相关博客链接以供深入理解。
3572

被折叠的 条评论
为什么被折叠?



