java递归基本结构_Java链表的天然递归结构性质图文与实例分析

本文实例分析了Java链表的天然递归结构性质。分享给大家供大家参考,具体如下:

要求:使用递归删除链表中指定的所有元素值。

一、图文分析

假设有这么一个链表,如下图:

f1d88152934a8edf1297a310cdacfae2.png

分析:基于链表的宏观语意(递归是问题更小的子过程)进行分析

我们可以把上述链表看成是一个头结点后面挂接了一个更小的链表组成,如下图:

476aa6938ae2b9cc5f129e8a91d9a132.png

此时我们可以把链表概括成如下的链表结构:

49ae4368ef7e71bcd18abe559c593285.png

1、在一个头结点+更小的链表基础上,从更小的链表中删除指定元素,得到一个全新的链表--图中红丝的方块。

9bfe298b36d6a2a07589eff5d000d24d.png

此时我们需要关心如何根据红丝的方块代码的链表构建出原问题的解-------也就是包括了原来头结点(头结点e)在内的情况。

2.判断头结点e是否是需要被删除的元素值,若头结点是不需要被删除的,此时的链表结构为头结点e+红色方块,否则为红色方块,相关结构图如下:

9496e9cf180a799d15e5bbdd9161fc28.png

二、代码实现

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);

}

}

结果如下:

42a876b13afd01f8b763ffe766e7ca9c.png

希望本文所述对大家java程序设计有所帮助。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值