【专题一 递归】24. 两两交换链表中的节点

1.题目解析

2.讲解算法原理

  • 让前两个节点后面的链表先逆置,并且把头结点返回
  • 把当前两个结点进行交换,并且找到新的头结点
  • 把后面链表直接添加到当前已经逆置的两个节点后面

3.编写代码

java 复制代码
/**
 * 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) {
        ListNode newHead=dfs(head);
        return newHead;
    }
    public ListNode dfs(ListNode head){
        if(head==null||head.next==null){
            return head;
        }
        ListNode newHead=dfs(head.next.next);
        ListNode ret=head.next;
        ret.next=head;
        head.next=newHead;
        return ret;
        
    }
}
相关推荐
lihao lihao6 分钟前
二分查找
java·数据结构·算法
WolfGang0073219 分钟前
代码随想录算法训练营 Day15 | 二叉树 part05
数据结构·算法
代码栈上的思考9 分钟前
消息队列持久化:文件存储设计与实现全解析
java·前端·算法
qq_4176950519 分钟前
内存对齐与缓存友好设计
开发语言·c++·算法
2301_8166512220 分钟前
实时系统下的C++编程
开发语言·c++·算法
2401_8318249621 分钟前
C++与Python混合编程实战
开发语言·c++·算法
2301_8166512228 分钟前
C++中的策略模式高级应用
开发语言·c++·算法
LDR00630 分钟前
如何使用OpenClaw提高工作效率?
数据结构·算法
liuyao_xianhui30 分钟前
优选算法_模拟_替换所有的‘?‘_C++
开发语言·javascript·数据结构·c++·算法·链表·动态规划