码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2016-03-18 10:57:09      阅读:167      评论:0      收藏:0      [点我收藏+]

标签:

题目:
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]

标签:

原文地址:http://blog.csdn.net/lnho2015/article/details/50918302

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!