秋招刷题笔记第三天
力扣102. 二叉树的层序遍历
***二叉树层序遍历,本题需要用队列,在此记录队列基本用法
class Solution {
public List<List<Integer>> levelOrder(TreeNode root) {
List<List<Integer>> l = new ArrayList<>();
if(root==null){
return l;
}
Queue<TreeNode> queue = new ArrayDeque<>();queue.add(root);
while(!queue.isEmpty()){
List<Integer> l1=new ArrayList<Integer>();
int n = queue.size();
for(int i=0;i<n;i++){
TreeNode t= queue.poll();
l1.add(t.val);
if(t.left!=null){
queue.add(t.left);
}
if(t.right!=null){
queue.add(t.right);
}
}
l.add(l1);
}
return l;
}
}
力扣19. 删除链表的倒数第 N 个结点
遍历每个节点后面的节点,判断后面的节点个数是否是指定值n,成功则删除此节点
class Solution {
public ListNode removeNthFromEnd(ListNode head, int n) {
ListNode l = head;
ListNode m = new ListNode();
m.next = head;
ListNode b = m;
while(l!=null){
ListNode temp = l;
for(int i=0;i<n;i++){
temp = temp.next;
}
if(temp!=null){
l = l.next;
m = m.next;
}else{
System.out.print(m.val);
m.next = l.next;
break;
}
}
return b.next;
}
}
力扣61. 旋转链表
先将链表连成环,在通过规律(n-1)-( k mod n)找到最后一个节点,将链断开
class Solution {
public ListNode rotateRight(ListNode head, int k) {
if(head==null){
return null;
}
ListNode l = head;
int n = 1;
ListNode t = head;
while(t.next!=null){
t = t.next;
n++;
}
t.next = l;
for(int i=0;i<(n-1)-(k%n);i++){
head = head.next;
}
ListNode m = head.next;
head.next = null;
return m;
}
}