【算法学习】两两交换链表中的结点(递归)

本文介绍了如何使用递归方法解决链表中两两交换节点的问题,通过函数拆分和递归出口的设定,详细展示了代码实现过程和关键思路。
摘要由CSDN通过智能技术生成

专栏文章:算法学习
作者主页:格乐斯

前言

本文章记录了算法题 两两交换链表中的节点 的递归解法

题目

力扣链接

在这里插入图片描述

思路

对当前节点head的后两个节点的链表L1进行节点两两交换,再记录下head的next节点,并对head和head.next节点两两交换,最后添加到交换后的链表L1

图片解析

在这里插入图片描述

函数头

swapPairs (head.next.next)

函数体

newhead= head.next;

​ newhead.next=head;

​ head.next=tmp;

​ return newhead;

递归出口

if (head == null || head.next == null) return head

//无论节点个数为偶数还是奇数,递归到最后遇到空节点返回head

代码编写

class Solution {
    public ListNode swapPairs(ListNode head) {
        if(head==null || head.next==null) return head;
        ListNode tmp=swapPairs(head.next.next);
        ListNode newhead= head.next;
        newhead.next=head;
        head.next=tmp;
        return newhead;
    }
}

总结

递归算法题的核心思路:找到子问题和递归出口
本题的子问题:两两交换节点
递归出口:递归到空节点返回head


文章到这结束啦,感谢阅读~

如果你觉得文章写的还不错,记得点赞收藏评论三连~ ❤

img

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值