本文实例分析了Java链表的天然递归结构性质。分享给大家供大家参考,具体如下:
有关链表,参考之前的文章学习。
要求:使用递归删除链表中指定的所有元素值。
假设有这么一个链表,如下图:
分析:基于链表的宏观语意(递归是问题更小的子过程)进行分析
我们可以把上述链表看成是一个头结点后面挂接了一个更小的链表组成,如下图:
此时我们可以把链表概括成如下的链表结构:
1、在一个头结点+更小的链表基础上,从更小的链表中删除指定元素,得到一个全新的链表--图中红丝的方块。
此时我们需要关心如何根据红丝的方块代码的链表构建出原问题的解-------也就是包括了原来头结点(头结点e)在内的情况。
2.判断头结点e是否是需要被删除的元素值,若头结点是不需要被删除的,此时的链表结构为头结点e+红色方块,否则为红色方块,相关结构图如下:
package LeetCodeSubject; /* * 使用虚拟头节点 * */ class Solution3 { public ListNode removeElements(ListNode head, int val) { if (head == null) return null; ListNode res = removeElements(head.next, val); if (head.val == val) return res; else { head.next = res; return head; } } public static void main(String[] args) { int[] nums = {1, 2, 6, 3, 4, 5, 6}; ListNode head = new ListNode(nums); System.out.println(head); ListNode res = (new Solution()).removeElements(head, 6); System.out.println(res); } }
结果如下:
更多关于java算法相关内容感兴趣的读者可查看本站专题:《Java数据结构与算法教程》、《Java操作DOM节点技巧总结》、《Java文件与目录操作技巧汇总》和《Java缓存操作技巧汇总》
希望本文所述对大家java程序设计有所帮助。
本文向大家介绍C语言数据结构 链表与归并排序实例详解,包括了C语言数据结构 链表与归并排序实例详解的使用技巧和注意事项,需要的朋友参考一下 C语言数据结构 链表与归并排序实例详解 归并排序适合于对链表进行原址排序,即只改变指针的连接方式,不交换链表结点的内容。 归并排序的基本思想是分治法:先把一个链表分割成只有一个节点的链表,然后按照一定顺序、自底向上合并相邻的两个链表。 只要保证各种大小的子链表
本文向大家介绍Java中递归原理实例分析,包括了Java中递归原理实例分析的使用技巧和注意事项,需要的朋友参考一下 本文实例分析了Java中递归原理。分享给大家供大家参考。具体分析如下: 解释:程序调用自身的编程技巧叫做递归。 程序调用自身的编程技巧称为递归( recursion)。递归做为一种算法在程序设计语言中广泛应用。 一个过程或函数在其定义或说明中有直接或间接调用自身的一种方法,它通常把一
本文向大家介绍数据结构 二叉树的递归与非递归,包括了数据结构 二叉树的递归与非递归的使用技巧和注意事项,需要的朋友参考一下 数据结构 二叉树的递归与非递归 实例代码: 先序遍历(递归法) 后序遍历 感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!
本文向大家介绍JavaScript实现的链表数据结构实例,包括了JavaScript实现的链表数据结构实例的使用技巧和注意事项,需要的朋友参考一下 此例是javascript来建立链表。。 并对此进行了排序。。 还可以在GenericList一般链表上进行扩展。 实现各种排序及增,删,改结点。。
本文向大家介绍单链表反转 递归法Java实现相关面试题,主要包含被问及单链表反转 递归法Java实现时的应答技巧和注意事项,需要的朋友参考一下 经历了很多面试,面试官最爱考察的算法无非是斐波那契数列和单链表反转,尽管是这些都是基础知识,然而我对单链表反转有更多的想法。 递归法是我早期最爱在面试中使用的算法,很有逼格,写起来非常优雅,非常好理解。 先定义链表数据结构 如上代码所示 递归法会逐层确定该
本文向大家介绍Java实现的质因数分解操作示例【基于递归算法】,包括了Java实现的质因数分解操作示例【基于递归算法】的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了Java实现的质因数分解操作。分享给大家供大家参考,具体如下: 这里演示java通过递归实现质因数分解,代码如下: 运行结果: PS:这里提供一款功能相似的在线工具供大家参考:在线分解质因数计算器工具 http://tools