说来惭愧,这道算法题卡了笔者一下午,归结其原因是在于对于引用类型的连续赋值的理解上存在问题,故记录下这个理解过程,希望自己的知识厚度可以每天增长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
来获得,进而让循环进行下去。 -
需要理解的是,引用类型的栈内存中存放的是一个指向堆内存的地址,换句话说,堆内存中存放的东西就客观存放在那里,纵使指针改变,它也还是存在在那里。