算法基础入门-LeetCode-206.反转链表

307 阅读1分钟

说来惭愧,这道算法题卡了笔者一下午,归结其原因是在于对于引用类型的连续赋值的理解上存在问题,故记录下这个理解过程,希望自己的知识厚度可以每天增长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,这样就完成了obj1obj2指针反转,但是这样会存在一个问题,就是反转后obj1应该指向null,obj2指向obj1,所以这里需要错开一位,让obj2的初始值为null

  • tempVar是设置的临时变量,保存obj1的next所指向的地址;这样在后续为obj1.next赋值的时候,还可以通过临时变量tempVar来获得,进而让循环进行下去。

  • 需要理解的是,引用类型的栈内存中存放的是一个指向堆内存的地址,换句话说,堆内存中存放的东西就客观存放在那里,纵使指针改变,它也还是存在在那里。