美文网首页剑指Offer
3.2 链表的递归(3)

3.2 链表的递归(3)

作者: coderjiege | 来源:发表于2017-12-30 12:44 被阅读11次

套路

  • 链表问题有两种解法:1.递归 2. 两根指针

注意点

  • 暂无

目录

  • 合并两个排序的链表(递归)
  • 从尾到头打印链表(递归)
  • 删除链表中重复的结点(递归、两根指针)

合并两个排序的链表

输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。

public ListNode Merge(ListNode list1,ListNode list2) {
    if (list1 == null) return list2;
    if (list2 == null) return list1;
    if (list1.val <= list2.val) {
        list1.next = Merge(list1.next, list2);
        return list1;
    } else {
        list2.next = Merge(list1, list2.next);
        return list2;
    }
}

从尾到头打印链表

输入一个链表,从尾到头打印链表每个节点的值。

  • 最优解:递归法是代码量最少的,本题可以用栈实现,而如果不用数据结构的话就可以用递归实现。其实本质上也是用栈实现,只不过栈变成了JVM方法栈。
private ArrayList<Integer> res = new ArrayList<>();
public ArrayList<Integer> printListFromTailToHead(ListNode listNode) {
    if (listNode != null) {
        printListFromTailToHead(listNode.next);
        res.add(listNode.val);
    }
    return res;
}

删除链表中重复的结点

在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5

public ListNode deleteDuplication(ListNode pHead) {
    if (pHead == null || pHead.next == null) {
        return pHead;
    }
    if (pHead.val == pHead.next.val) {
        ListNode pNode = pHead.next;
        while (pNode.next != null && pHead.val == pNode.next.val) {
            pNode = pNode.next;
        }
        return deleteDuplication(pNode.next);
    } else {
        pHead.next = deleteDuplication(pHead.next);
        return pHead;
    }
}

相关文章

  • 3.2 链表的递归(3)

    套路 链表问题有两种解法:1.递归 2. 两根指针 注意点 暂无 目录 合并两个排序的链表(递归) 从尾到头打印链...

  • 算法图解系列之递归[03]

    3 递归 3.1 递归<函数> 3.2 基线条件和递归条件 3.3 递归调用栈

  • 链表的操作和算法相关

    github->demo1、创建(单链表、双链表、循环链表)2、翻转单链表(递归和非递归)3、判断链表是否存在环。...

  • leetcode 单链表的各种算法

    1 递归实现:合并两个有序的单链表 2 递归实现:单链表逆序存入vector 3 循环实现:快慢指针找到单链表中间...

  • Algorithm小白入门 -- 单链表

    单链表递归反转链表k个一组反转链表回文链表 1. 递归反转链表 单链表节点的结构如下: 1.1 递归反转整个单链表...

  • 算法2:递归算法与二分查找

    3.递归算法3.1斐波那契数列(递归)3.2汉诺塔3.3八皇后问题4.⼆分查找递归实现 4.1二分递归查找: 3....

  • C语言——第五次笔记

    学生管理系统1.明确功能2.数据存储3.准备知识3.1 枚举3.2 链表 (单链表,循环链表,双向链表,双向循环链...

  • 链表相关的题

    单向链表反转 如1->2->3->4,反转成4->3->2->1反转链表有2种做法,递归和循环。递归写法: 循环写...

  • 递归的学习顺序

    1.先学递归的基础,了解递归的原理2.学习链表,因为链表中用到了递归3.学习二叉树,二叉树相当于特殊的链表二叉树的...

  • 合并两个排序的链表

    给定两个递增的链表,合并成一个递增链表如给1 3 5和2 4 6,合并后该为1 2 3 4 5 6 非递归方法 递归方法

网友评论

    本文标题:3.2 链表的递归(3)

    本文链接:https://www.haomeiwen.com/subject/pvbggxtx.html