说来惭愧,这道算法题卡了笔者一下午,归结其原因是在于对于引用类型的连续赋值的理解上存在问题,故记录下这个理解过程,希望自己的知识厚度可以每天增长1cm。
下面就切入正题,leetcode-cn.com/problems/re…
🚀感悟:
- 对于复杂问题要学会肢解,就是先从简单的问题开始,找到相同点,先处理一个,然后
该添加遍历的添加遍历,该添加判断的添加判断。
🚀codePart:
var recoverLinkList = function(head){
var obj1 = head;
var obj2 = null;
while(obj1){
var tempVar = obj1.next;
obj1.next = obj2;
obj2 = obj1;
obj1 = tempvar;
}
}
-
一开始是是想让
obj1的指针指向obj2,然后obj2的指回obj1,这样就完成了obj1和obj2指针反转,但是这样会存在一个问题,就是反转后obj1应该指向null,obj2指向obj1,所以这里需要错开一位,让obj2的初始值为null -
tempVar是设置的临时变量,保存obj1的next所指向的地址;这样在后续为obj1.next赋值的时候,还可以通过临时变量tempVar来获得,进而让循环进行下去。 -
需要理解的是,引用类型的栈内存中存放的是一个指向堆内存的地址,换句话说,堆内存中存放的东西就客观存放在那里,纵使指针改变,它也还是存在在那里。