复制操作符=,其实这个很简单的东西,但如果深究起来,那也还是需要一些精力去理解的。

C语言是有指针的,也就是pointer。但Java没有,JavaScript也没有,其实不是没有,而是很多高级语言是不允许你直接操作内存数据的,为了安全,也为了方便。

最近刷leetcode,遇到一个小问题,21. Merge Two Sorted Lists

解法比较简单,先设置一个变量,比如叫做dummy,let dummy = {val = 0, next= null},然后再把dummy赋值给另一个变量,比如叫做runner。然后,对这个runner进行各种操作,最后返回dummy.next

这个就比较费解了。

其实原因呢,就是dummy这个变量指向了一个内存里的地址,把dummy赋值给runner之后,runner也指向了内存中的这个地址。
但后来,操作runner这个变量名,改变了内存里变量的一个小小的属性,就是next,其实这时dummy.next也肯定是变了。
再后来,直接改变了runner,让它指向新的内存地址,最后反正是生成了一个新的linked list

所以最后返回dummy.next,其实就是runner第一次改变了next属性后,next指向的第一个新的node,也就是新生成的linked list的第一个node

完。

标签: leetcode

添加新评论