news 2026/4/23 11:55:48

算法学习 递归

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
算法学习 递归

1.合并两个有序链表

将两个升序链表合并为一个新的升序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。

示例 1:

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

示例 2:

输入:l1 = [], l2 = []输出:[]

示例 3:

输入:l1 = [], l2 = [0]输出:[0]
/** * 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 mergeTwoLists(ListNode list1, ListNode list2) { if(list1==null){ return list2; } else if(list2==null){ return list1; }else if(list1.val<list2.val){ list1.next = mergeTwoLists(list1.next,list2); return list1; }else{ list2.next = mergeTwoLists(list1,list2.next); return list2; } } }

2.两两交换链表中的节点

给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)。

示例 1:

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

示例 2:

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

示例 3:

输入:head = [1]输出:[1]
/** * 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; // } // // cur 是当前链表中第二个节点(交换后会成为新的头节点) // ListNode cur = head.next; // // 递归处理 cur.next 开始的剩余链表,返回的结果作为原头节点的后继 // head.next = swapPairs(cur.next); // // 交换当前两个节点:cur 指向原头节点 head // cur.next = head; // // 返回交换后的新头节点 cur // return cur; //非递归 ListNode pre = new ListNode(0);//定义一个虚拟头结点 pre.next = head; ListNode temp = pre; while(temp.next!=null&&temp.next.next!=null){ ListNode start = temp.next; ListNode end = temp.next.next; temp.next = end; // 步骤1:前驱节点指向第二个节点 start.next = end.next; // 步骤2:第一个节点指向第二个节点的后继 end.next = start; // 步骤3:第二个节点指向第一个节点 temp = start; // 步骤4:移动temp到交换后的第一个节点(下一轮的前驱) } return pre.next; } }

3.重排链表

给定一个单链表L的头节点head,单链表L表示为:

L0 → L1 → … → Ln - 1 → Ln

请将其重新排列后变为:

L0 → Ln → L1 → Ln - 1 → L2 → Ln - 2 → …

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

示例 1:

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

示例 2:

输入:head = [1,2,3,4,5]输出:[1,5,2,4,3]
/** * 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 void reorderList(ListNode head) { if(head==null||head.next==null||head.next.next==null){ return; } // 找到倒数第二个节点(prev)和最后一个节点(tail) ListNode prev = head; while(prev.next.next!=null){ prev=prev.next; } ListNode tail = prev.next; //断开连接 prev.next=null; //保留下一个节点 ListNode nextNode = head.next; head.next=tail; tail.next = nextNode; //递归 reorderList(nextNode); } }
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/17 21:12:49

Kazumi跨设备观影同步终极指南:实现无缝观影体验的完整方案

Kazumi跨设备观影同步终极指南&#xff1a;实现无缝观影体验的完整方案 【免费下载链接】Kazumi 基于自定义规则的番剧采集APP&#xff0c;支持流媒体在线观看&#xff0c;支持弹幕。 项目地址: https://gitcode.com/gh_mirrors/ka/Kazumi 在当今多设备并用的数字时代&a…

作者头像 李华
网站建设 2026/4/18 23:12:33

天爱验证码:Java项目安全验证的终极解决方案

在数字化浪潮中&#xff0c;企业安全面临前所未有的挑战。天爱验证码&#xff08;TAC&#xff09;作为Java界领先的开源行为验证码解决方案&#xff0c;通过创新的滑块验证、旋转验证、点选验证等技术&#xff0c;为企业构建坚不可摧的安全防线。 【免费下载链接】tianai-captc…

作者头像 李华
网站建设 2026/4/16 10:39:34

Citra模拟器终极指南:5步快速畅玩3DS游戏

Citra模拟器终极指南&#xff1a;5步快速畅玩3DS游戏 【免费下载链接】citra 项目地址: https://gitcode.com/GitHub_Trending/ci/citra 想要在电脑上重温任天堂3DS的经典游戏吗&#xff1f;&#x1f3ae; Citra开源模拟器让这个愿望轻松实现&#xff01;作为功能强大的…

作者头像 李华
网站建设 2026/4/18 12:30:39

终极参考文献排版优化:打造简洁高效的学术写作体验

终极参考文献排版优化&#xff1a;打造简洁高效的学术写作体验 【免费下载链接】个人自制GBT77142015模板 个人自制GB/T 7714 2015 模板本仓库提供了一个个人自制的 Zotero GB/T 7714 2015 模板&#xff0c;旨在优化参考文献的排版格式 项目地址: https://gitcode.com/open-s…

作者头像 李华
网站建设 2026/4/17 17:50:47

计算广告:智能时代的营销科学与实践(九)

目录 5.3 竞价广告需求方产品 一、需求方产品的演进&#xff1a;从“工具”到“战略伙伴” 二、核心产品形态详解 &#xff08;一&#xff09;自助广告投放平台&#xff1a;大众化营销的基石 &#xff08;二&#xff09;需求方平台&#xff1a;程序化交易时代的“核武器” …

作者头像 李华
网站建设 2026/4/17 17:11:24

Linux查找目录完全指南:掌握find命令的实用技巧

在Linux系统中&#xff0c;高效地查找目录是每个用户和管理员必备的基本技能。无论是寻找特定的配置文件目录&#xff0c;还是清理空目录释放磁盘空间&#xff0c;掌握目录查找技巧都能显著提高工作效率。本文将全面介绍Linux下查找目录的各种方法&#xff0c;重点深入讲解功能…

作者头像 李华