JavaScript实现链表反转

67 阅读1分钟

代码如下:(包含个人解析)

function ListNode(val) {
  this.val = val;
  this.next = null;
}

function reverseList(head) {

  // head为null 或head只有一个元素时 直接返回
  if (head === null || head.next === null) {
    return head
  }

  // 定义3个变量 执行一个循环
  p1 = head
  p2 = head.next
  p3 = null

  // 一直执行到p2为null 
  while (p2 !== null) {
    // p3为p2的next
    p3 = p2.next
    // 改变p2的next指向 指向p1
    p2.next = p1
    // 把p1 p2 p3 这三个标识往后移 p1 取代 p2的位置
    p1 = p2
    // p2 取代 p3的位置 继续执行p2的next指向改变操作
    p2 = p3
  }
  // 将之前的head 也就是现在链表的最后一位置为null
  head.next = null
  // 再将head 修改为现在p1的位置
  head = p1
  // 将head返回出去
  return head

}