概述
这两天写了两道用递归解出的链表题
算法:
将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。
输入:l1 = [1,2,4], l2 = [1,3,4]
输出:[1,1,2,3,4,4]
/**
* 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 l1, ListNode l2) {
if(l2==null){
return l1;
}else if(l1==null){
return l2;
}else if(l1.val<l2.val){
//把小的放到前面,用后面的继续比较
l1.next = mergeTwoLists(l1.next,l2);
return l1;
}else{
l2.next = mergeTwoLists(l1,l2.next);
return l2;
}
}
}
算法:
反转链表
给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。
/**
* 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 reverseList(ListNode head) {
if(head==null || head.next==null){
return head;
}
ListNode newHead = reverseList(head.next);
head.next.next = head;
head.next = null;
return newHead;
}
}
下面是思路图解,有点潦草
怎么说呢,递归有点难理解,画图理解比较容易理解一些。
怎么看出是否使用递归呢,递归的条件就是是否可以把大问题分解为多个小问题,大问题和小问题是一样的,得有终止条件,是有穷的。经典的递归题斐波那契数列。
之前学长给我们讲算法,他告诉我们递归这种题做多了,就知道怎么做了,不用想那么多就知道为什么这么做了。
递归很奇妙,算法得继续坚持了。
最后
以上就是可耐鸡翅为你收集整理的力扣上简单的链表递归题的全部内容,希望文章能够帮你解决力扣上简单的链表递归题所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复