美文网首页
203. Remove Linked List Elements

203. Remove Linked List Elements

作者: 窝火西决 | 来源:发表于2019-05-29 16:14 被阅读0次

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

题目要求

从链表中删除与所给值相等的元素

思路

首先,链表删除大体有两种方式:都已删除当前节点cur为例:

  1. 知道前驱节点pre:则pre.next=cur.next;cur.next=null
  2. 不知道前驱节点:则把下一个节点的值赋值给当前节点,删除下一个节点即可;cur.val=cur.next.val;cur.next=cur.next.next

所以考虑这个问题的几种特殊情况,也需要以上两种删除节点方式。

  • 首先判断当前节点值是否等于所给的值,是,则用赋值方法删除;
  • 若当前节点值不等于所给的值了,则判断当前节点的next是否等于,是,则用第一种方法删除。

特殊情况是所有节点的值都等于给定的值,即需要全部删除,则以上操作会剩下一个节点,判断一下另head=null即可。
同样的,需要考虑一开始给定的链表就为空或者就只有一个元素的情况。

代码

 public ListNode removeElements(ListNode head, int val) {
         ListNode q =head;
         if (head==null) {//若链表一开始为空
            return head;
        }
         if (q.next==null&&q.val==val) {//若链表一开始只有一个元素
            head=null;
        }
         while (q!=null&&q.next!=null) {
            if (q.val==val) {//先判断当前节点
                q.val=q.next.val;
                q.next=q.next.next;
                continue;
            }
            
            if (q.next.val==val) {//再判断后面的节点
                q.next=q.next.next;
                continue;
            }
            
            q=q.next;//都没问题指针向后走一步
            
        }
          if (q.next==null&&q.val==val) {//最后判断一下,特殊情况全部为val
            head=null;
        }
         
        return head;
            
            
        }

相关文章

网友评论

      本文标题:203. Remove Linked List Elements

      本文链接:https://www.haomeiwen.com/subject/edyytctx.html