链表
1.判断链表是否有环
public class Solution {
public boolean hasCycle(ListNode head) {
if (head == null) return false;
ListNode fast = head;
ListNode slow = head;
while (fast != null && fast.next != null) {
slow = slow.next;
fast = fast.next.next;
if (slow == fast) {
return true;
}
}
return false;
}
}
定义一个ListNode:
public static class ListNode {
int val;
ListNode next = null;
public ListNode(int val) {
this.val = val;
}
}
树
1.二叉树的前序遍历
class Solution {
public List<Integer> preorderTraversal(TreeNode root) {
ArrayList<Integer> res = new ArrayList<Integer>();
doAddList(root,res);
return res;
}
public void doAddList(TreeNode root,List<Integer> res) {
Stack<TreeNode> stack = new Stack<TreeNode>();
while (root != null || !stack.isEmpty()) {
while (root != null) {
res.add(root.val);
stack.add(root);
root = root.left;
}
root = stack.pop().right;
}
}
}