Day 51
第203题:
删除链表中等于给定值 val 的所有节点。(来自LeetCode)
1、平常删除链表元素时只需要将p的next指向p的next的next,当删除元素不在链表头时可以这样操作;
但是当链表头部存在一个或多个需要删除的元素时,如果直接删除会很复杂,所以就可以设置一个哨兵节点来解决这个问题,保证链表一直都有头;
设置一个哨兵节点ess,ess.next指向头,然后使用两个指针pre和cur分别指向ess和ess.next;
然后对cur指向的链表元素进行判断,做出操作,最终返回结果。
第204题:
统计所有小于非负整数 n 的质数的数量。(来自LeetCode)
1、质数是只能对1或者它本身整除的数;
利用一个布尔数组来存储这个数是否为质数,false代表是质数;
遍历数组下标,如果此元素是false,res++;否则就将这个元素设为true,而且下标是这个下标倍数的数组元素也设为true(因为肯定不是质数);
比如说求20以内质数的个数,首先0,1不是质数.2是第一个质数,然后把20以内所有2的倍数划去;
2后面紧跟的数即为下一个质数3,然后把3所有的倍数划去;
3后面紧跟的数即为下一个质数5,再把5所有的倍数划去.以此类推。
第206题:
反转一个单链表。(来自LeetCode)
1、将pre指向null,cur指向head,然后在交换的时候需要保存cur.next,因为cur还需要向后移动,所以需要直到cur的后继;
这样循环最终得出结果。