①英文题目

Remove all elements from a linked list of integers that have value val.

Example:

Input:  1->2->6->3->4->5->6, val = 6
Output: 1->2->3->4->5

②中文题目

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

示例:

输入: 1->2->6->3->4->5->6, val = 6
输出: 1->2->3->4->5

③思路

1、加入链表为空,那么直接返回head。

2、考虑6,5,4,3,2,1,val=6.

所以,一开始就要判断头结点的值是否等于val。所以考虑用while或者if来写此处逻辑。

3、考虑,6,6,6,5,4,3,2,1,val=6

当我删除第一个6之后,后面又来一个6,所以,这个需要不停循环,直到首个元素不再是6.

所以大致是

 while(head!=null&&head.val==val){
head=head.next;
}

4、考虑  1->2->6->3->4->5->6, val = 6。

国际惯例,先让head赋给别的结点名,比如

 ListNode pre=head;//以后有什么事情,就在pre上做操作。而要return全部时,就return head

判断,如果pre.next的val和pre.next.next的val相等,那就把原本的pre.next删掉,代码写起来就是让pre的next不再指向pre.next,而是指向pre.next.next,

这个逻辑需要用一个while循环来写,while里保证pre.next存在,即不等于null。代码写起来就是

 while(pre.next!=null){
if(pre.next.val==pre.next.next.val)
pre.next==pre.next.next; //看见一次next,就读作往后走了一个单位。
else
pre=pre.next; //否则,让pre往后顺延一个单位
}

④总的代码如下:

 class Solution {
public ListNode removeElements(ListNode head, int val) {
while(head!=null&&head.val==val)
head=head.next; //只有当头结点的val不再等于val时,才走出循环
if(head==null)
return head;
ListNode pre=head;
while(pre.next!=null){
if(pre.next.val==val)
pre.next=pre.next.next;
else
pre=pre.next; //否则,让pre往后顺延1个单位 }
return head;
}
}

1、第一次见到连续两个.next;

2、几乎看见每一个链表题里,都会写一句把原本的头结点给赋给一个新声明的结点,比如ListNode pre=head;

当然,在这个赋值语句之前,先要保证head已经稳定了(比如本题总程序的3-4行就是在寻求一个稳定的head,不然,谁敢把不确定的head赋值给pre)。

⑥别人的“递归”代码:

  public ListNode removeElements(ListNode head, int val) {
if (head == null)
return null;
head.next = removeElements(head.next, val);//先不管head.val是否等于val,而是先保证从第二个元素开始,去掉每个等于val的元素。
if (head.val == val) {
return head.next;
} else {
return head;
}
}

最新文章

  1. Dynamics CRM导出数据到Excel
  2. css 文本显示点点点
  3. 透透彻彻IoC(你没有理由不懂!)
  4. Android中GridView的实现实例
  5. js 获取时间对象代码
  6. Python isinstance判断对象类型
  7. (转)jQuery验证控件jquery.validate.js使用说明+中文API
  8. 【InversionCount 逆序对数 + MergeSort】
  9. The mell hall——坑爹
  10. LeetCodeOJ. Longest Common Prefix
  11. 1006-HBase操作实战(JAVA API状态)
  12. Tomcat session生成算法
  13. 潜谈IT从业人员在传统IT和互联网之间的择业问题(下)-互联网公司
  14. centos7安装与配置nginx1.11,开机启动
  15. 【机器学习】K均值算法(I)
  16. Ant之build.xml配置详解【转】
  17. MFC动态按钮的创建及其消息响应(自定义消息)
  18. mysql host'XXX' is not allowed to connect to this mysql server
  19. HTML5遇到的问题
  20. hackerrank-knapsack

热门文章

  1. eclipse中的项目运行时不出现run as→java application选项
  2. Python_三元运算与lambda表达式
  3. Python3字符串常见方法
  4. 利用hash远程登陆系统
  5. 整理了适合新手的20个Python练手小程序
  6. 6G仅仅是比5G多1G吗??
  7. Kafka权威指南阅读笔记(第六章)
  8. linux下shell脚本启动jar包
  9. http和Https简介、详解
  10. Linux常见命令之文件处理命令