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]