一 N叉树的最大深度
/*
// Definition for a Node.
class Node {
public int val;
public List<Node> children;
public Node() {}
public Node(int _val) {
val = _val;
}
public Node(int _val, List<Node> _children) {
val = _val;
children = _children;
}
};
*/
class Solution {
int result=0;
public int maxDepth(Node root) {
if(root==null){
return 0;
}
DFS(1,root);
return result;
}
public void DFS(int deep,Node root){
result=Math.max(result,deep);
if(root.children!=null){
for(int i=0;i<root.children.size();i++){
DFS(deep+1,root.children.get(i));
}
}
}
}
T:O(n)
二 链表的中间节点 快慢双指针
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode() {}
* ListNode(int val) { this.val = val; }
* ListNode(int val, ListNode next) { this.val = val; this.next = next; }
* }
*/
class Solution {
public ListNode middleNode(ListNode head) {
if(head==null){
return null;
}
int num=0;
ListNode fast=head;
ListNode slow=head;
while(fast!=null){
fast=fast.next;
num++;
if(fast==null){
break;
}
slow=slow.next;
if(fast==null){
break;
}
fast=fast.next;
num++;
}
return slow;
}
}
T:O(n)
三 删除链表的倒数第N个结点 快慢双指针
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode() {}
* ListNode(int val) { this.val = val; }
* ListNode(int val, ListNode next) { this.val = val; this.next = next; }
* }
*/
class Solution {
public ListNode removeNthFromEnd(ListNode head, int n) {
ListNode slow=head;
ListNode fast=head;
if(head.next==null){
return null;
}
for(int i=0;i<n;i++){
fast=fast.next;
}
if(fast==null){
return head.next;
}
while(fast.next!=null){
fast=fast.next;
slow=slow.next;
}
slow.next=slow.next.next;
return head;
}
}
T:O(n)