六、剑指 Offer(25~29)

文章目录

  • 一、25 合并两个排序的链表
    • 1.算法描述
    • 2.算法题解
  • 一、26 树的子结构
    • 1.算法描述
    • 2.算法题解
  • 一、25 合并两个排序的链表
    • 1.算法描述
    • 2.算法题解


一、25 合并两个排序的链表

1.算法描述

输入两个递增排序的链表,合并这两个链表并使新链表中的节点仍然是递增排序的。

2.算法题解

根据链表 l1、l2 是递增的,因此可以使用双指针遍历链表,根据 val1、val2 的大小关系确定节点添加顺序,两指针交替前进,直至遍历完成。

由于初始状态合并链表中无节点,因此需要初始化一个辅助节点 root 作为合并链表的伪头结点。

class Solution {
     
    public ListNode mergeTwoLists(ListNode l1, ListNode l2) {
     
        ListNode root = new ListNode(0), cur = root;
        while (l1 != null && l2 != null) {
     
            if (l1.val < l2.val) {
     
                cur.next = l1;
                l1 = l1.next;
            } else {
     
                cur.next = l2;
                l2 = l2.next;
            }
            cur = cur.next;
        }
        cur.next = l1 != null ? l1 : l2;
        return root.next;
    }
}

一、26 树的子结构

1.算法描述

输入两棵二叉树A和B,判断B是不是A的子结构。(约定空树不是任意一个树的子结构)

B是A的子结构, 即 A中有出现和B相同的结构和节点值。

2.算法题解

一、25 合并两个排序的链表

1.算法描述

输入两个递增排序的链表,合并这两个链表并使新链表中的节点仍然是递增排序的。

2.算法题解

你可能感兴趣的:(剑指,Offer)