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<ListNode> 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;
}
}

最新文章

  1. Xamarin的不归路-生成安卓错误3
  2. 屏蔽防止被别的网站嵌入框架代码(防止被人frame)
  3. ~/.config/user-dirs.dirs【桌面设置】
  4. log4j---------学习总结(一)
  5. VIM技巧:显示行号
  6. eclipse 中忽略jsp, xml文件中的报错信息
  7. ECC校验优化之路
  8. string.Format 日期格式化
  9. LDD命令--可执行文件依赖的库出现错误时
  10. U813.0操作员功能权限和数据权限的设置
  11. 页面显示LCD液晶字体或者其他特殊字体
  12. 如何用ABP框架快速完成项目(14) - 结尾? 当然不是, 这只是开始!
  13. [macOS] error when brew updating
  14. Vue的filter属性
  15. 优化 要引入多个 模块 使用调用的方法,让管理更便捷 --execfile() 函数
  16. leetcode1014
  17. Hadoop基础-MapReduce的Join操作
  18. HDUOJ-----4506小明系列故事——师兄帮帮忙
  19. 【Java集合源代码剖析】TreeMap源代码剖析
  20. tornado 05 模块继承

热门文章

  1. 搭建yum仓库与定制rpm包
  2. 101490E Charles in Charge
  3. use zlib lib to compress or decompress file
  4. Java源码分析系列之HttpServletRequest源码分析
  5. 安装php扩展phpredis
  6. UCS业务知识介绍
  7. MOBA 游戏技能系统设计 2.0
  8. Docker小记 — Docker Engine
  9. 线性一致性与全序广播------《Designing Data-Intensive Applications》读书笔记12
  10. pip install 提示&quot;no previously-included directories found matching&quot;及&quot;no previously-included files matching found anywhere in distribution&quot;,且偶发无法关联安装 PyPI 库的故障