标题 | 203. 移除链表元素 |
难度 | 简单 |
天数 | 第7天,第3/3题 |
数据结构 | 链表 |
给你一个链表的头节点
head
和一个整数val
,请你删除链表中所有满足Node.val == val
的节点,并返回 新的头节点 。
示例 1:
输入:head = [1,2,6,3,4,5,6], val = 6
输出:[1,2,3,4,5]
示例 2:
输入:head = [], val = 1
输出:[]
示例 3:
输入:head = [7,7,7,7], val = 7
输出:[]
提示:
- 列表中的节点数目在范围
[0, 104]
内 1 <= Node.val <= 50
0 <= val <= 50
以上内容来源:力扣(LeetCode)
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
思路:
- 如果头结点
==null
代表链表是空的,直接返回
if(head == null){
return head;
}
- 将头结点等于整数
val
的节点移除
//删除头结点相等的节点
while(head != null && head.val == val){
head = head.next;
}
- 在删除其他和整数
val
相等的节点,- 方法node.next=node.next.next; 会将node.next节点移除
- 如果不相等,就查询下一个节点,node 移动到next;
//删除==val的节点
while(node != null && node.next != null){
if(node.next.val == val){
node.next = node.next.next;
}else{
node = node.next;
}
}
完整代码
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode() {}
* ListNode(int val) { this.val = val; }
* ListNode(int val, ListNode next) { this.val = val; this.next = next; }
* }
*/
class Solution {
//数据结构 第 7 天 3/3 链表
public ListNode removeElements(ListNode head, int val) {
if(head == null){
return head;
}
//删除头结点相等的节点
while(head != null && head.val == val){
head = head.next;
}
ListNode node = head;
//删除==val的节点
while(node != null && node.next != null){
if(node.next.val == val){
node.next = node.next.next;
}else{
node = node.next;
}
}
//返回新的头结点
return head;
}
}