力扣第二十四题-两两交换链表中的节点

前言力扣第二十四题 两两交换链表中的节点 如下所示:给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。示例 1:输入:head = [1,2,3,4]输出:[2,1,4,3]示例 2:输入:head = []输出:[]示例 3:输入:head = [1]输出:[1]一、思路既然要置换链表中的两两节点,很简单的思路就是从左至右遍历这个链表,只要碰到两个节点就交换。上面的这种遍历的形式,其实也可以通
摘要由CSDN通过智能技术生成

前言

力扣第二十四题 两两交换链表中的节点 如下所示:

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

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

示例 1

image.png

输入:head = [1,2,3,4]
输出:[2,1,4,3]

示例 2

输入:head = []
输出:[]

示例 3

输入:head = [1]
输出:[1]

一、思路

既然要置换链表中的两两节点,很简单的思路就是从左至右遍历这个链表,只要碰到两个节点就交换。

上面的这种遍历的形式,其实也可以通过递归来实现链表中的相邻节点交换。具体的步骤如下所示:

假设如下:
head:初始化指向原链表首节点
temp:临时变量

  • 如果 head 指向的链表没有两个节点,则直接返回 head
  • temp = head.next,指向head后面的一个节点
  • 开始递归 temp.next(因为前两个元素已处理过了,所以这里需要开始处理第三个元素)
  • temp.next = head,再temp.next指向将处理过后的head

举个例子:

假设链表为 1->2->3->4->5

  1. head 开始指向 1 (1->2->3->4->5)
  2. temp 指向 2,(2->3->4->5)
  3. 递归处理 temp.next,即处理3->4->5,最终递归的返回结果为 4->3->5
  4. 将递归的结果给 head.next,即head仍未1,但整个链表变为了 1->4->3->5
  5. 再将 temp.next = head.next,即temp指向的链表变为了 2->1->4->->5

二、实现

如上面思路所说,共有两种方案来实现。迭代和递归,我认为迭代比较好理解,递归更需要明确什么时候开始递归。

迭代

实现代码

<
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值