7.12 leetcode简单 - 链表、树

剑指 Offer 06. 从尾到头打印链表

链表: head   或   node

node.val   表示一个元素的值;

node = node.next   遍历到下一个元素。

1、遍历链表,依次把遍历到的元素值 unshift(从头插入)到一个数组中

2、递归函数(本质是栈解法), 递归本身与栈后进先出的原理一致。

通过递归到链表的最后一个元素开始,push到数组中。需要注意是否会因为链表过长导致栈溢出。

3、先将链表反转,再遍历输出链表。(可能不允许改变函数输入的原链表)

var reversePrint = function(head) {
    const nums = [];
    const reverseP = function (head) {
        if(head != null) {
            reverseP(head.next);
           nums.push(head.val);
        }
        
    }
    reverseP(head);
    return nums;
};

剑指 Offer 18. 删除链表的节点

在链表的操作中,添加一个哑节点(dummy node),让它的指针指向链表的头节点,这样在删除节点的时候,就不需要再判断删除的是不是头结点了。

let dummy = new ListNode(0, head); 
// 设置哑结点的数据域为0,指针域指向链表的头结点:dummy.val = 0, dummy.next = head;

剑指 Offer 24. 反转链表

理解指针:指针不受链表的限制,是可以任意赋值,去指向某一节点。

递归

  1. 终止条件  
    if (n <= 2) return 1;    // 其中,f(0)=0,f(1)=1
  2. 用递推公式来表示递归问题
    f(n) = f(n-1) + f(n-2)

递归是某个重复动作的形式化描述。如果一个问题 A 可以分解为若干子问题 B、C、D,可以假设子问题 B、C、D 已经解决,在此基础上思考如何解决问题 A。并且只需要思考 A 与 B、C、D 两层之间的关系即可,不需要一层一层往下思考子问题与子子问题等之间的关系(递归只能考虑当前层和下一层的关系)。

node.next.next = node;
node.next = null;

剑指 Offer 28. 对称的二叉树

树的遍历:后序遍历

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值