前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【一天一大 lee】两两交换链表中的节点 (难度:中等) - Day20201013

【一天一大 lee】两两交换链表中的节点 (难度:中等) - Day20201013

作者头像
前端小书童
发布2020-10-14 17:18:40
2890
发布2020-10-14 17:18:40
举报
文章被收录于专栏:前端小书童前端小书童

20201013

题目:

给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。

你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。

示例:

代码语言:javascript
复制
给定 1->2->3->4, 你应该返回 2->1->4->3.

抛砖引玉

思路

交换的逻辑:

交换的逻辑

代码语言:javascript
复制
// 记录节点next指针
temp = node.next
// 更新next指针
node.next = temp.next
// 连接新链表next指针
temp.next = node

抛砖引玉

代码语言:javascript
复制
/**
 * Definition for singly-linked list.
 * function ListNode(val, next) {
 *     this.val = (val===undefined ? 0 : val)
 *     this.next = (next===undefined ? null : next)
 * }
 */
/**
 * @param {ListNode} head
 * @return {ListNode}
 */
var swapPairs = function(head) {
  // 初始化新链表
  let node = new ListNode(),
    prevNode = node
  while (head && head.next) {
    const temp = head.next
    // 追加到新列表
    prevNode.next = temp
    head.next = temp.next
    temp.next = head
    // 更新新链表中上一个节点指针
    prevNode = head
    // 更新指针交换下一组子链
    head = head.next
  }
  // 返回新链表的根
  return node.next
}

递归

在原链表中交换

交换的逻辑

假设只有两个节点:head 表示原始链表的根节点,那么从其 next 节点与其交换,交换完成

那么如果有多组节点:反正传入节点和其 next,然后返回两个交换节点后面的节点,这样一组一组递归交换下去则可以得到满足要求的链表

代码语言:javascript
复制
var swapPairs = function(head) {
  if (head === null || head.next === null) return head
  const node = head.next
  head.next = swapPairs(node.next)
  node.next = head
  return node
}

第一次插入示意图,图画的有些简陋......

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-10-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 前端小书童 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 题目:
  • 抛砖引玉
    • 递归
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档