zoukankan      html  css  js  c++  java
  • 力扣(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 }
    
    
  • 相关阅读:
    高效算法——D 贪心,区间覆盖问题
    高效算法——C 分饼
    高效算法——A 归并排序
    高效算法——Most financial institutions 贪心 H
    高效算法——E
    高效算法——Bin Packing F
    POJ2192
    UVa11584
    POJ2429
    POJ1811- Prime Test(Miller–Rabin+Pollard's rho)
  • 原文地址:https://www.cnblogs.com/axiangcoding/p/10372373.html
Copyright © 2011-2022 走看看