LeetCode---24. 两两交换链表中的节点_ZhiZDK的博客-程序员宝宝

技术标签: 算法  java  链表  leetcode  指针  LeetCode  

题目:24. 两两交换链表中的节点

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

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

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode() {}
 *     ListNode(int val) { this.val = val; }
 *     ListNode(int val, ListNode next) { this.val = val; this.next = next; }
 * }
 */
class Solution {
    
    public ListNode swapPairs(ListNode head) {
    
        
    }
}

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


可以使用递归来解决本题

思路:

 两两交换链表中的节点,拿第一个节点头节点head与第二个节点newHead(newHead = head.next) 来讲,需要将headnewHead交换位置,使newHead变成链表中的头节点,head变成第二个节点,然后head再指向已经处理好的链表,
 以此类推,递归调用本身,直到最后只剩下一个节点或者为空,结束返回新的头指针,也就是newHead

步骤
  1. 首先应该进行判断,判断是否已经递归到了链表的结尾,也就是说,如果当前节点为null或者当前节点的下一个节点为null,就说明此时已经到了链表的结尾,可以直接返回当前节点给上一层
  2. 如果能够到达第二步,就说明当前节点没有到达链表的末尾,仍需将当前节点与下一个节点进行交换,先获取当前节点的下一个节点 (ListNode newHead = head.next;)
  3. 接着使当前节点指向递归调用部分,也就是当前节点指向后面已经处理好的部分 (head.next = swapPairs(newHead.next); )
  4. 然后使newHeadnext指向head,完成本次交换 (newHead.next = head;)
  5. 最后返回新的头指针newHead,题目完成 (return newHead;)
完整代码
/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode() {}
 *     ListNode(int val) { this.val = val; }
 *     ListNode(int val, ListNode next) { this.val = val; this.next = next; }
 * }
 */
class Solution {
    
    public ListNode swapPairs(ListNode head) {
    
        if (head == null || head.next == null) {
    
            return head;
        }
        ListNode newHead = head.next;
        head.next = swapPairs(newHead.next);
        newHead.next = head;
        return newHead;
    }
}
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_43713797/article/details/116047592

智能推荐

IDEA的Debug窗口成为独立窗口,怎么恢复_wx_8780的博客-程序员宝宝_ideal回复下面debug初始化界面

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。本文链接:https://mp.csdn.net/mdeditor/102797801如上图所示,idea启动debug模式,idea的debug窗口被我不小心操作,变成了独立的debug窗口,并且点其他的按钮都回不去,这就很不开心了。解决方法:如下图在标红的位置右键,右键效果如下图...

程序猿秃顶算工伤吗?_weixin_34038293的博客-程序员宝宝

在各个年龄段的程序猿中,70后以年龄优势遥遥领先,80后开始油腻,90后开始掉发,掉发的迅猛程度隐隐有赶超80后的趋势,脱单已然不是他们最担心的问题,脱发才是!程序猿敲掉不不光是键盘上的字母,更是头顶上原本可怜兮兮的头发……曾经小鲜肉如今变成了“地中海大叔”。双十一过后,苏宁IT基于内部500名程序员的头发分析,正式对外发布了“脱发”大数据。更是为6000+程序猿享受了一场特殊的保健服务——发...

Flutter(十三)——事件处理:手势识别与事件通知_李元静的博客-程序员宝宝

本文目录前言GestureDetector基本用法常用事件监听事件实现缩放监听事件实现拖拽前言在Flutter开发App的过程中,我们除了需要灵活的使用各种组件之外,还需要掌握手势的识别,比如我们常常需要在操作App的时候使用到缩放,双击,放大,缩小等操作,这些Flutter都给我们提供了监听的组件GestureDetector。这篇博文将详细介绍GestureDetector手势识别的使用规...

java生成图片验证码的源码_gladmustang的博客-程序员宝宝

package com.hzjw.common;import java.awt.Color;import java.awt.Font;import java.awt.Graphics;import java.awt.image.BufferedImage;import java.io.IOException;import java.io.OutputStream;import j

pip安装出现问题 OSError: [Errno 13] Permission denied: '/usr/bin/pip'_AllardZhao的博客-程序员宝宝

[[email protected] ~]$ pip install --upgrade pipCache entry deserialization failed, entry ignoredCollecting pip Downloading https://pypi.doubanio.com/packages/62/ca/94d32a6516ed197a491d17d46595c...

第6章第3节-Bellman-Ford-解决负权边_余生还长着呢的博客-程序员宝宝_bellmanford发现负权时,如果将其路径更新,会发生什么

/*对所有的边进行n-1次的松弛操作检测一个图是否有负权回路:如果在n-1松弛之后最短路仍然会发生变化,则改图必然存在负权回路在实际操作中,Bellman-Ford算法经常会在未达到n-1轮松弛前就已经计算出最短路,n-1其实是最大值因此可以添加一个变量check用来标记数组dis在本轮松弛中是否发生了变化,如果没有发生变化,则可以提前跳出循环*/#include "stdio.h"i...

随便推点

32位RedHat Enterprise Linux 5 Update 4下安装Oracle10.2.0.1_cizhu1437的博客-程序员宝宝

安装要求:CPU,1GMHz以上 内存,1G以上 硬盘,安装系统后建议10G空闲空间1、检查和安装必要的软件包: binutils-2.17.5...

【ANSYS 学习笔记】Case05_Basic Transient Sources and Circuit_逐梦小伙的博客-程序员宝宝

• Transient Setup – This workshop discusses basic setup details of 2D Magnetic Transient solver –本研讨会讨论2D电磁瞬态求解器的基本设置细节 – The transient setup is described with two different excit...

切换系统语言导致崩溃问题_龚礼鹏的博客-程序员宝宝

第一步需要在配置文件的activity中添加配置文件android:configChanges="locale|layoutDirection|keyboard"第二步需要在有dialog.show得地方做一下判断if (loadingDialog != null && !((BaseActivity)mContext).isFinishing()) { l...

Java替换所有的字符串_Ancony_的博客-程序员宝宝

经常遇到一种经常替换字符串的操作,有一个文本,将里面的所有符合条件的字符串替换为另一个字符串。而且可能同时需要替换多个这样的字符串。使用文本处理工具,比如sublime,vi等等也可以很方便地实现。这里给出一个java版本的实现,给出的是核心实现,如果实现全自动的话,还需要读者进一步封装。package cn.ancony.os.replace;import java.util.Ha...

html的头部添加图片,在JavaScript中添加HTTP头到图像请求_Strive追逐者的博客-程序员宝宝

在角1.2.X有很多方法可以做到这一点。在角度1.2中,我建议使用http interceptor“擦除”传出请求并添加标题。// An interceptor is just a service.app.factory('myInterceptor', function($q) {return {// intercept the requests on the way out.request: ...

自定义注解实现多数据源动态切换_XYLANCC的博客-程序员宝宝_自定义注解切换数据源

背景前几天在做数据表分库逻辑,需要前端传入dbName实现自由选择数据源的分库逻辑。本打算集成MyBatis-Plus提供的dynamic-datasource工具包,但是数据源配置都写死在了yml里,而公司的项目是基于微服务的,配置类都统一访问远程配置中心获取,于是只能利用AOP在service层做拦截,自己造轮子实现分库逻辑,过程如下:1、注册多数据源:@[email protected]("classpath:mybatis/spring-mybatis.xml"

推荐文章

热门文章

相关标签