题目:
思路:
1.将当前根节点存入队列中,然后将值记录下来后将该数据从队列中删除
2.使用Deque双端队列接收录下来的值
3.使用flag判断层数,根据层数实现不同的添加顺序到双端列表中
class Solution {
public List<List<Integer>> zigzagLevelOrder(TreeNode root) {
List<List<Integer>> lists = new LinkedList<>();
if(root == null){
return lists;
}
Queue<TreeNode> queue = new LinkedList<>();
queue.add(root);
boolean sign = true;
while (!queue.isEmpty()){
int size = queue.size();
Deque<Integer> res = new LinkedList<>();
for (int i = 0; i < size; i++) {
TreeNode curr = queue.poll();
if(sign){
res.addLast(curr.val);
}else {
res.addFirst(curr.val);
}
if(curr.left!=null){
queue.add(curr.left);
}
if(curr.right!=null){
queue.add(curr.right);
}
}
lists.add(new LinkedList<>(res));
sign = !sign;
}
return lists;
}
}
题目:
思路:
1.使用双指针的思路,让快指针先走,当快指针的值等于慢指针的时候则代表闭环了
public class Solution {
public boolean hasCycle(ListNode head) {
if(head==null){
return false;
}
if(head.next==null){
return false;
}
ListNode slow=head;
ListNode fast=head;
while(fast!=null&&fast.next!=null){
slow=slow.next;
fast=fast.next.next;
if(slow==fast){
return true;
}
}
return false;
}
}