LeetCode

2、两数相加

链表结构与树的结构类似,但是链表只有节点值和下一节点两个属性,因此除了递归,也可以通过循环来遍历。

3、无重复字符的最长子串

滑动窗口

7、整数反转

我们想重复“弹出”x的最后一位数字,并将它“推入”到rev的后面。最后,rev将与x相反。

要在没有辅助堆栈/数组的帮助下“弹出”和“推入”数字,我们可以使用数学方法。

//pop operation:
pop = x % 10;
x /= 10;

//push operation:
temp = rev * 10 + pop;
rev = temp;

当temp = rev * 10 + pop;时可能导致溢出(超出int所能表示的最大范围),解决方法:

1、声明rev为long类型,返回前判断rev是否超出int所能表示的最大范围:

if (rev > Integer.MAX_VALUE || rev < Integer.MIN_VALUE) {
    return 0;
} else {
    return (int)rev;
}

2、在rev * 10前对rev和pop进行判断:

if (rev > Integer.MAX_VALUE/10 || (rev == Integer.MAX_VALUE / 10 && pop > 7)) return 0;

if (rev < Integer.MIN_VALUE/10 || (rev == Integer.MIN_VALUE / 10 && pop < -8)) return 0;

3、用try/catch处理

237、删除链表中的节点

从链表里删除一个节点node的最常见方法是修改之前节点的next指针,使其指向之后的节点。

因为,我们无法访问我们想要删除的节点之前的节点,我们始终不能修改该节点的next指针。相反,我们必须将想要删除的节点的值替换为它后面节点中的值,然后删除它之后的节点。

因为我们知道要删除的节点不是列表的末尾,所以我们可以保证这种方法是可行的。

继续阅读“LeetCode”