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; } }