删除链表中等于给定值 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 }
原文地址:https://www.cnblogs.com/axiangcoding/p/10372373.html
时间: 2024-11-09 09:03:28