1. 输入一个链表,输出该链表中倒数第k个结点。
注意边界情况, 如k=0, head= null
/*
public class ListNode {
int val;
ListNode next = null;
ListNode(int val) {
this.val = val;
}
}*/
public class Solution {
public ListNode FindKthToTail(ListNode pListHead,int k) {
if(pListHead == null)
return null;
if(k == 0)
return null;
ListNode p = pListHead;
for(int i=0; i<k-1; i++){
p = p.next;
if(p == null)
return null;
}
ListNode result = pListHead;
while(p.next != null){
result = result.next;
p = p.next;
}
return result;
}
}
2. 反转链表
输入一个链表,反转链表后,输出新链表的表头。
/*public class ListNode {
int val;
ListNode next = null;
ListNode(int val) {
this.val = val;
}
}*/
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;
}
}
3. 合并链表
输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。
递归,没想出来
public class ListNode {
int val;
ListNode next = null;
ListNode(int val) {
this.val = val;
}
}*/
public class Solution {
public ListNode Merge(ListNode l1,ListNode l2) {
if(l1 == null)
return l2;
if(l2 == null)
return l1;
if(l1.val <= l2.val){
l1.next = Merge(l1.next, l2);
return l1;
}
else{
l2.next = Merge(l1, l2.next);
return l2;
}
}
}
4. 判断二叉树A的包含B
输入两棵二叉树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 pRoot1, TreeNode pRoot2) {
boolean flag = false;
if(pRoot1 != null && pRoot2 != null){
if(pRoot1.val == pRoot2.val)
flag = containSubtree(pRoot1, pRoot2);
if(!flag)
flag = containSubtree(pRoot1.left, pRoot2);
if(!flag)
flag = containSubtree(pRoot1.right, pRoot2);
}
return flag;
}
public boolean containSubtree(TreeNode root1, TreeNode root2){
if(root2 == null) return true;
if(root1 == null) return false;
if(root1.val != root2.val) return false;
return containSubtree(root1.left, root2.left) && containSubtree(root1.right, root2.right);
}
}
5. 镜像二叉树
操作给定的二叉树,将其变换为源二叉树的镜像。
/*
public class TreeNode {
int val = 0;
TreeNode left = null;
TreeNode right = null;
public TreeNode(int val) {
this.val = val;
}
}
*/
public class Solution {
public void Mirror(TreeNode root) {
if(root != null){
swap(root);
Mirror(root.left);
Mirror(root.right);
}
}
public void swap(TreeNode root){
if(root.left != null || root.right !=null){
TreeNode temp = root.left;
root.left = root.right;
root.right = temp;
}
}
}