Leet Code OJ 203. Remove Linked List Elements [Difficulty: Easy]
2016-03-17 23:35
239 查看
题目:
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)):
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; } }
相关文章推荐
- QT_Socket_udp
- ubutnu安装Terminator后的配置和oh-my-zsh安装
- 设计模式(六简单工厂模式)
- java web开发中的多线程应用?
- [算法练习]Reverse Integer
- ERROR (ClientException) nova image-list
- Android——Activity中的六个主要函数
- css3总结笔记
- 综合布线系统之7个子系统构成
- Delphi使用StrToDatetime在不同操作系统出现不同的情况(控制面板的时间格式都记录在注册表里,因此也可修改注册表)
- 综合布线系统之7个子系统构成
- 做java的web开发有用过多线程吗
- PB setfilter函数详解
- Json解析的两种方法:一种Android自带的,一种第三方Gson
- 解决一些eclipse无法正常启动的问题
- 简单ESB的服务架构
- Delphi中获取Unix时间戳及注意事项(c语言中time()是按格林威治时间计算的,比北京时间多了8小时)
- 遍历结构体中的变量
- Android——onCreate( )方法详解(转)
- String、StringBuffer与StringBuilder之间区别