反转链表后输出、合并两个排序链表、树的子结构 -- 漫漫算法路 刷题篇

来源:互联网 发布:流星网络电视看不了 编辑:程序博客网 时间:2024/05/16 14:03

1、反转链表后输出  题目描述

输入一个链表,反转链表后,输出链表的所有元素。
public class Solution {
    public ListNode ReverseList(ListNode head) {
ListNode pre = null;
        ListNode next = null;
        while(head!=null){
            next = head.next;
            head.next = pre;
            pre = head;
            head = next;
        }
        return pre;
    }
}

2、合并两个排序的链表  题目描述

输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。
public class Solution {
    public ListNode Merge(ListNode list1,ListNode list2) {
        if(list1==null){
            return list2;
        }else if(list2==null){
            return list1;
        }
        ListNode newlist = null;
if(list1.val>list2.val){
            newlist = list2;
            newlist.next = Merge(list1,list2.next);
        }else{
            newlist = list1;
            newlist.next = Merge(list1.next,list2);
        }
        return newlist;
    }
}

3、树的子结构  题目描述

输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)
/**
public class TreeNode {
    int val = 0;
    TreeNode left = null;
    TreeNode right = null;


    public TreeNode(int val) {
        this.val = val;


    }


}
*/
public class Solution {
    public boolean HasSubtree(TreeNode root1,TreeNode root2) {
        boolean result =false;
        if(root1!=null&&root2!=null){
            if(root1.val==root2.val){
                result = GetResult(root1,root2);
            }
            if(!result){
                result = GetResult(root1.left,root2);
            }
            if(!result){
                result = GetResult(root1.right,root2);
            }
        }
        return result;
    }
 public boolean GetResult(TreeNode root1,TreeNode root2){
            if(root1==null&&root2!=null) return false;
            if(root2==null) return true;
            if(root1.val!=root2.val) return false;
        return GetResult(root1.left, root2.left) && GetResult(root1.right, root2.right);
        }
}

原创粉丝点击