LeetCode:删除链表中的节点【203】

LeetCode:删除链表中的节点【203】

题目描述

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

示例:

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

题目分析

  链表的经典问题。首先我们要清楚这不是双向链表,进行删除操作,一定要知道待删除节点的前一个和后一个节点后一个节点可以用Node.next代指,但是前一个需要一个专用的指针,所以这就是链表的双指针问题

  

Java题解

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode(int x) { val = x; }
 * }
 */
class Solution {
    public ListNode removeElements(ListNode head, int val) {
        //待删除的节点有三种情况:
        //CASE1:头部节点是目标值,我们直接跳到next,直到摆脱这种情况
        //CASE2:中间节点是目标值,L=R,R=R.next; 条件满足时 L.next=R.next即可
        //CASE3:尾部节点是目标值,同上。
        while(head!=null&&head.val==val)
            head=head.next;
    
        ListNode L = new ListNode(0);
        ListNode R = head;
        L.next =R;
        while(R!=null)
        {
            if(R.val==val)
            {
                L.next=R.next;
                R=L.next;
                continue;
            }
            L =R;
            R=R.next;
        }
        return head;    
    }
}

  

posted @ 2018-08-16 08:58  子烁爱学习  阅读(233)  评论(0编辑  收藏  举报