博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
剑指offer第一天
阅读量:6944 次
发布时间:2019-06-27

本文共 3960 字,大约阅读时间需要 13 分钟。

15.反转链表

输入一个链表,反转链表后,输出链表的所有元素。

解法一:(使用栈)
/*public class ListNode {    int val;    ListNode next = null;    ListNode(int val) {        this.val = val;    }}*/import java.util.Stack;public class Solution {    public ListNode ReverseList(ListNode head) {        Stack
stack = new Stack<>(); if(head == null) return null; while(head != null){ stack.push(head); head = head.next; } head = stack.pop(); ListNode temp = head; while(!stack.empty()){ temp.next = stack.pop(); temp = temp.next; } temp.next = null;//一定要注意这里的这行代码 //一定要将链表末位next置为null return head; }}
解法二:
public class Solution{    public ListNode ReverseList(ListNode head){        ListNode reversedListHead;        ListNode pre = null;        ListNode node = null;        ListNode next = null;        if(head == null) return null;        node = head;        while(true){            next = node.next;            node.next = pre;            pre = node;            if(next == null){                reversedListHead = node;                break;            }               node = next;        }        return reversedListHead;    }}

16.合并两个排序的链表

输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。

解法一:
public class Solution {    public ListNode Merge(ListNode list1,ListNode list2) {        //if(list1 == null && list2 == null) return null;        //这行代码可以不要,因为当list1 == null  return list2也等于null        if(list1 == null) return list2;        if(list2 == null) return list1;        ListNode head,node;        if(list1.val <= list2.val){            node = list1;            head = node;            list1 = list1.next;        }else{            node = list2;            head = node;            list2 = list2.next;        }        while(list1 != null&&list2 != null){            if(list1.val<=list2.val){                node.next = list1;                list1 = list1.next;                node = node.next;            }else{                node.next = list2;                list2 = list2.next;                node = node.next;            }        }        while(list1 != null){            node.next = list1;            list1 = list1.next;            node = node.next;        }        while(list2 != null){            node.next = list2;            list2 = list2.next;            node = node.next;        }        return head;    }}
解法二:(使用递归)
public class Solution {    public ListNode Merge(ListNode list1,ListNode list2) {        if(list1 == null) return list2;        if(list2 == null) return list1;        ListNode MergedHead = null;        if(list1.val <= list2.val){            MergedHead = list1;            MergedHead.next = Merge(list1.next,list2);        }else{            MergedHead = list2;            MergedHead.next = Merge(list1,list2.next);        }        return MergedHead;    }}

17.树的子结构

输入两棵二叉树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) {        if(root1==null||root2==null) return false;        boolean result = false;        if(root1.val == root2.val){            result = isEqualTree(root1,root2);        }        if(!result)            result = HasSubtree(root1.left,root2);        if(!result)            result = HasSubtree(root1.right,root2);        return result;    }    public boolean isEqualTree(TreeNode tree1,TreeNode tree2){        //注意此处,只需判断tree2 == null即可返回true;        //因为tree2为子树,此时tree1可以不为null,即tree1不为叶节点        if(tree2 == null) return true;         if(tree1 == null) return false;        if(tree1.val == tree2.val){            return isEqualTree(tree1.left,tree2.left) && isEqualTree(tree1.right,tree2.right);        }        return false;    }}

转载于:https://www.cnblogs.com/guoyaohua/p/8299391.html

你可能感兴趣的文章
时间记录日志
查看>>
Node.js
查看>>
进程 线程通信方式(转载)
查看>>
在ios上,fixed定位因为input导致手机下面出现空白,视图变小
查看>>
hdu 1695(欧拉函数 容斥定理)
查看>>
mysql在表的某一位置增加一列、删除一列、修改列名
查看>>
计算机基础知识
查看>>
SpringMVC系列(九)自定义视图、重定向、转发
查看>>
PAT 1029 Median
查看>>
需要总结的知道
查看>>
python 从小白开始 - 字符串操作(不可修改)
查看>>
管理现有数据库-web系统
查看>>
无缝滚动
查看>>
JVM(四)垃圾收集器_分代收集器
查看>>
根据图片路径生成二进制流,下载图片
查看>>
正则表达式的基本用法
查看>>
Shell 同步时间脚本
查看>>
条目十五《注意strng实现的多样性》
查看>>
P1387 最大正方形
查看>>
mysql distinct 用法详解及优化
查看>>