【一天一大 lee】两两交换链表中的节点 (难度:中等) - Day20201013
时间:2022-07-26
本文章向大家介绍【一天一大 lee】两两交换链表中的节点 (难度:中等) - Day20201013,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
20201013
题目:
给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。
你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。
示例:
给定 1->2->3->4, 你应该返回 2->1->4->3.
抛砖引玉
思路
交换的逻辑:
交换的逻辑
// 记录节点next指针
temp = node.next
// 更新next指针
node.next = temp.next
// 连接新链表next指针
temp.next = node
抛砖引玉
/**
* 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,然后返回两个交换节点后面的节点,这样一组一组递归交换下去则可以得到满足要求的链表
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
}
第一次插入示意图,图画的有些简陋......
- Yarn【label-based scheduling】实战总结(一)
- 配置sonarqube+maven
- Yarn【label-based scheduling】实战总结(二)
- HDFS学习:HDFS机架感知与副本放置策略
- spring cloud 报错Error creating bean with name 'hystrixCommandAspect' ,解决方案
- Spring Security OAuth2 Demo
- SpringBoot学习:整合shiro(身份认证和权限认证),使用EhCache缓存
- 线性回归与最小二乘法 | 机器学习笔记
- 添加sqljdbc4的maven依赖
- MyBatis 实现关联表查询
- 数据结构 | 栈
- mybatis 针对SQL Server 的 主键id生成策略
- 算法 | 排序算法图形化比较:快速排序、插入排序、选择排序、冒泡排序
- WCF 添加 RESTful 支持,适用于 IIS、Winform、cmd 宿主
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 浙大版《C语言程序设计(第3版)》题目集 练习7-4 找出不是两个数组共有的元素
- 浙大版《C语言程序设计(第3版)》题目集 练习7-7 矩阵运算
- 系统之眼!Linux系统性能监控工具Glances
- 浙大版《C语言程序设计(第3版)》题目集 练习7-8 方阵循环右移
- 浙大版《C语言程序设计(第3版)》题目集 练习7-9 计算天数
- 浙大版《C语言程序设计(第3版)》题目集 练习7-10 查找指定字符
- 浙大版《C语言程序设计(第3版)》题目集 练习7-11 字符串逆序
- 浙大版《C语言程序设计(第3版)》题目集 习题7-1 选择法排序
- 浙大版《C语言程序设计(第3版)》题目集 习题7-2 求一批整数中出现最多的个位数字
- 浙大版《C语言程序设计(第3版)》题目集 习题7-3 判断上三角矩阵
- 浙大版《C语言程序设计(第3版)》题目集 习题7-4 求矩阵各行元素之和
- 浙大版《C语言程序设计(第3版)》题目集 习题7-6 统计大写辅音字母
- 浙大版《C语言程序设计(第3版)》题目集 习题7-7 字符串替换
- 浙大版《C语言程序设计(第3版)》题目集 习题8-10 输出学生成绩
- 浙大版《C语言程序设计(第3版)》题目集 习题9-1 时间换算