LeetCode24. 两两交换链表中的节点 (JavaScript解法)

题目地址

LeetCode24. 两两交换链表中的节点 (JavaScript解法)_第1张图片

题解

  • 题目关键在于弄清楚链表各个指针交换前交换后的位置

思路1:迭代

  • 思路
  • 分析时间复杂度O(n)空间复杂度 O(1)
  • 代码实现
var swapPairs = function (head) {
  if (!head || !head.next) return head
  // 两个节点交换后,最新的头结点为第二个节点,所以最后返回mark
  let mark = head.next
  let cur = head, nxt = null, pre = head
  // 当还存在两个节点时就继续迭代
  while (cur && cur.next) {
    // 交换两个节点 
    nxt = cur.next
    pre.next = nxt
    cur.next = nxt.next
    nxt.next = cur

    // 重新初始化pre cur指针
    pre = cur
    cur = cur.next
  }
  return mark
};

思路2:递归

  • 分析时间复杂度O(n)空间复杂度 O(1)
  • 代码实现
var swapPairs = function (head) {
  // 递归终止条件
  if (!head || !head.next) return head
  // 本层递归需要干的事
  // 头结点和头结点的next节点交换后,nxt为新的头结点
  let nxt = head.next
  // 递归调用
  head.next = swapPairs(nxt.next)
  nxt.next = head
  // 返回给上层的数据
  return nxt
};

思路的通过时间的对比

LeetCode24. 两两交换链表中的节点 (JavaScript解法)_第2张图片

思路二的时间

你可能感兴趣的:(JavaScript,数据结构与算法,指针,链表,leetcode,算法)