Leet Code OJ 203. Remove Linked List Elements [Difficulty: Easy]

Posted Lnho

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Leet Code OJ 203. Remove Linked List Elements [Difficulty: Easy]相关的知识,希望对你有一定的参考价值。

题目:
Remove all elements from a linked list of integers that have value val.

Example
Given: 1 –> 2 –> 6 –> 3 –> 4 –> 5 –> 6, val = 6
Return: 1 –> 2 –> 3 –> 4 –> 5

翻译:
从一个整数链表中移除所有value为val的元素。
例如
给定: 1 –> 2 –> 6 –> 3 –> 4 –> 5 –> 6, val = 6
返回: 1 –> 2 –> 3 –> 4 –> 5

分析:
首先,既然是移除链表的元素,有2种移法,一种是在遍历到某个元素时,去比较它的下一个元素(移除它的下一个元素),直接修改next指针;另一种是遍历到某个元素时,将下一个元素的值和next指针赋值给当前元素(变相删除了当前元素),但是这种做法有一个局限,就是无法删除链表尾部的元素。
所以,我们只能采用第一种做法,但是这种做法又隐含了一个问题,就是先要确认第一个元素是与val不等的(不然如果从head开始遍历,也就是去比较head的下一个元素,这个时候其实是跳过了head.val与val的比较)。
下面的方案中,我们先通过一个循环来找出满足不等val的条件的第一个元素,将head指针指向它。这步操作完成后,如果head不为空的话,再采用刚刚所说的第一种做法,也就是始终比较它的下一个元素,直至下一个元素为空。

Java版代码(时间复杂度O(n)):

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode(int x) { val = x; }
 * }
 */
public class Solution {
    public ListNode removeElements(ListNode head, int val) {
        while(head!=null&&head.val==val){
            head=head.next;
        }
        if(head==null){
            return null;
        }
        ListNode current=head;
        while(current.next!=null){
            if(current.next.val==val){
                current.next=current.next.next;
            }else{
                current=current.next;
            }
        }
        return head;
    }
}

以上是关于Leet Code OJ 203. Remove Linked List Elements [Difficulty: Easy]的主要内容,如果未能解决你的问题,请参考以下文章

Leet Code OJ 26. Remove Duplicates from Sorted Array [Difficulty: Easy]

Leet Code OJ 83. Remove Duplicates from Sorted List [Difficulty: Easy]

Leet Code OJ 1. Two Sum [Difficulty: Easy]

Leet Code OJ 223. Rectangle Area [Difficulty: Easy]

Leet Code OJ 338. Counting Bits [Difficulty: Easy]

Leet Code OJ 20. Valid Parentheses [Difficulty: Easy]