删除链表中等于给定值 val 的所有节点。

这题粗看并不困难,链表的特性让移除元素特别轻松,只用遇到和val相同的就跳过,将指针指向下一个,以此类推。

但是,一个比较麻烦的问题是,当链表所有元素都和val相同时,如果直接使用参数给的head,则返回的一定会保留第一位的节点,而题意是要返回空值。

对上述情况使用特判又会与“第一个节点的值和val不同,第二个节点之后和val值相同”相矛盾。

所以想到的思路是,新建一个节点,将这个节点接在head的最前面,保证第一个节点无意义,这样,哪怕遇到上述情况,返回cur.next也是null。

这里回忆起之前专业课老师课上说过的内容,链表的第一个节点一般都放空值,现在知道这种约定俗成的规则是有哪些 坑 在里面了。

代码如下:

 class Solution {
public ListNode removeElements(ListNode head, int val) { ListNode ret=new ListNode(-1);
ret.next=head;
head=ret; while(head.next!=null)
{
if(head.next.val==val)
{
head.next=head.next.next;
}
else
head=head.next;
}
return ret.next; }
}
												

最新文章

  1. JavaScript与有限状态机
  2. Asp.net MVC中Html.Partial, RenderPartial, Action,RenderAction 区别和用法
  3. Bootstrap3生成响应式的特价商品展示布局
  4. 户外物理渗透:终端机,客户端的web测试思路
  5. WPF中Expander控件样式,ListBox的样式(带checkbox)恢复
  6. listview加载性能优化
  7. css3实现三角形,聊天背景气泡,心形等形状
  8. Java多线程之synchronized(三)
  9. Flex布局介绍
  10. NYoj_171聪明的kk
  11. CSharp工程中的几个文件
  12. CSS三栏布局
  13. 哈希表(Hash Table)原理及其实现
  14. 转:C#常用的集合类型(ArrayList类、Stack类、Queue类、Hashtable类、Sort)
  15. IdentityServer4使用EFCore生成MySql时的小bug
  16. 内存溢出导致jenkins自动部署到tomcat失败
  17. WordPress主题开发实例:根据不同分类使用不同模板
  18. XCode 遇到的问题
  19. 机器学习--boosting家族之Adaboost算法
  20. 用NI的数据采集卡实现简单电子测试之1——USB-6009简介

热门文章

  1. 使用unittest,if __name__ == '__main__':里代码不执行的解决办法
  2. python 读取文件夹中的文件内容
  3. 5.分析snkrs的Android的DeviceID生产规则
  4. 设计模式(十九)State模式
  5. Java多线程编程(三)线程间通信
  6. APP打包设置程序版本号
  7. SpringCloud之Nacos服务注册(十八)
  8. JavaScript中instanceof的判断依据
  9. Vue 实现前进刷新,后退不刷新的效果 玩转vue-router里的meta
  10. Linux常见命令之文件处理命令