左神算法笔记-反转链表

64 阅读1分钟

值传递 & 引用传递

  • 传递时总是整出独立的一份,就认为是“按值传递”;传递时变量还指向老的内存地址,就认为是“引用传递”。
  • “java总是采用按值调用”,这一句是说,哪怕按“引用传递”的变量,其实也是新的引用,这个新的引用和老的引用都指向同一个内存地址。
  • 举个例子,一个门牌上有内存地址,在传递时,总是新拷贝出新的门牌,但是新、老门牌上写的地址是一样的,指向内存的同一个区域。这就是所谓的“java总是采用按值调用”
public static void main(String[] args) {
   // int、long、byte、short
   // char、float、double、boolean
   // 还有String
   // 都是按值传递
   int a = 10;
   f(a);
   System.out.println(a);

   // 其他类型按引用传递
   // 比如下面的Number是自定义的类
   Number b = new Number(5);
   g1(b);
   System.out.println(b.val);
   g2(b);
   System.out.println(b.val);

   // 比如下面的一维数组
   int[] c = { 1, 2, 3, 4 };
   g3(c);
   System.out.println(c[0]);
   g4(c);
   System.out.println(c[0]);
}

反转链表

image.png

public ListNode reverseList(ListNode head) {
   ListNode pre = null;
   ListNode next = null;
   while (head != null) {
      next = head.next;
      head.next = pre;
      pre = head;
      head = next;
   }
   return pre;
}