【linked list】Leetcode 203: Remove Linked List Elements

https://leetcode.com/problems/remove-linked-list-elements

和常规的删除一个node的情况不同的是,它要求删除所有val为指定值的node。
这道题要注意一个点:
head node 的值是指定值,和中间node的值为指定值,在操作上不一样。比较好的办法是,在head前创建一个dummy node,那么这两种情况的操作就一样,最后返回的是 dummy.next。

思路:

  1. 由于要删除所有val为指定值的node,所以要遍历整个linked list,直到 p.next == null。
  2. 如果 p.next.val == val,那么就将此时p的后一个node删除;否则就将p继续往后移动;
/**
 * 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) {
//         当 head == null 的情况,以下代码返回结果仍然正确。
        
        ListNode dummy = new ListNode(0), p = dummy;
        dummy.next = head;
        
        while(p.next != null) {
//             if(p后一个值 == val),则将后一个node抛弃,也就是将p.next指向后2个node
//             否则,将p后移。也就是给p重新赋值,为p.next。
            
            if(p.next.val == val) {
                p.next = p.next.next;
            } else {
                p = p.next;
            }
        }
        
        return dummy.next;
    }
}

你可能感兴趣的:(【linked list】Leetcode 203: Remove Linked List Elements)