力扣(LeetCode)移除链表元素 个人题解

Posted Axiangcoding

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了力扣(LeetCode)移除链表元素 个人题解相关的知识,希望对你有一定的参考价值。

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

 

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

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

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

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

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

代码如下:

 1 class Solution {
 2     public ListNode removeElements(ListNode head, int val) {
 3         
 4         ListNode ret=new ListNode(-1);
 5         ret.next=head;
 6         head=ret;
 7       
 8         while(head.next!=null)
 9         {
10             if(head.next.val==val)
11             {
12                 head.next=head.next.next;
13             }
14             else
15                 head=head.next;
16         }
17         return ret.next;
18     
19     }
20 }

 

以上是关于力扣(LeetCode)移除链表元素 个人题解的主要内容,如果未能解决你的问题,请参考以下文章

203. 移除链表元素

LeetCode-203-移除链表元素

203链表-移除链表元素

203链表-移除链表元素

LeetCode494. 目标和 / 474. 一和零 / 203. 移除链表元素 / 第 244 场力扣周赛

LeetCode 0203. 移除链表元素