前端算法面试必刷题系列[11]

297 阅读1分钟

这个系列没啥花头,就是纯 leetcode 题目拆解分析,不求用骚气的一行或者小众取巧解法,而是用清晰的代码和足够简单的思路帮你理清题意。让你在面试中再也不怕算法笔试。

17. 两两交换链表中的节点 (swap-nodes-in-pairs)

标签

  • LinkList 操作
  • 中等

题目

leetcode 传送门

这里不贴题了,leetcode打开就行,题目大意:

两两交换链表中的节点,就是和题目一样。

基本思路

假设我们的链表是

  head -> node1 -> node2 -> node3 -> node4
   |
current

实际上第一回合目标就是把 node1 node2 交换,我们关注 current -> node1 -> node2交换之后的节点关系要变成 current -> node2 -> node1

其实要干的就这几步:

current.next = node2
node1.next = node2.next
node2.next = node1
current = node1

尝试画下图表示链接看,非常简单,我不贴了。

写法实现

var swapPairs = function(head) {
  // 常规操作,加前置节点
  const preHead = new ListNode(-1);
  preHead.next = head;
  // 设置一个current指针,指向我们下面要交换的两个节点
  let current = preHead;
  // 如果 current 的后面没有节点或者只有一个节点,则没有更多的节点需要交换,因此结束交换
  while (current.next !== null && current.next.next !== null) {
    const node1 = current.next;
    const node2 = current.next.next;
    current.next = node2;
    node1.next = node2.next;
    node2.next = node1;
    current = node1;
  }
  return preHead.next;
};

今天就到这儿,想跟我一起刷题的小伙伴可以加我微信哦 搜索我的微信号infinity_9368,可以聊天说地 加我暗号 "天王盖地虎" 下一句的英文,验证消息请发给我 presious tower shock the reiver monster,我看到就通过,暗号对不上不加哈

参考