Day 51

第203题:

删除链表中等于给定值 val 的所有节点。(来自LeetCode)

1、平常删除链表元素时只需要将p的next指向p的next的next,当删除元素不在链表头时可以这样操作;

  但是当链表头部存在一个或多个需要删除的元素时,如果直接删除会很复杂,所以就可以设置一个哨兵节点来解决这个问题,保证链表一直都有头;

  设置一个哨兵节点ess,ess.next指向头,然后使用两个指针pre和cur分别指向ess和ess.next;

  然后对cur指向的链表元素进行判断,做出操作,最终返回结果。

  

第204题:

统计所有小于非负整数 的质数的数量。(来自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的后继;

  这样循环最终得出结果。

  

原文地址:https://www.cnblogs.com/liang-yi-/p/13551378.html