持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第8天,点击查看活动详情
一、题目描述:
给你一个链表的头节点 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, 10^4] 内
- 1 <= Node.val <= 50
- 0 <= val <= 50
二、思路分析:
- 首先判断链表是否为空,为空则直接返回
- 循环链表中的所有节点,如果当前节点的val等于val时,则表示需要删除该节点,需要将当前节点的上一节点的next指向当前节点的下一个节点;这样就需要记录当前节点的上一个节点由于单向链表所以新建一个listNode,将listNode.next = head
- 定义两个指针 temp 和 temp2;temp=listNode,temp2=listNode.next(其实指向的是head)
- 循环链表 判断temp2.val 是否等于val 如果等于则将temp.next指向temp2.next;这样在temp2中就将当前节点删除
- 如果 temp2.val不等于val,则temp2 = temp2.next;temp=temp.next;继续下个几点进行比较
- 终止条件是 temp2 == null时;
三、AC 代码:
public ListNode removeElements(ListNode head, int val) {
if(head == null){
return head;
}
ListNode listNode = new ListNode(-1);
listNode.next = head;
ListNode temp = listNode;
ListNode temp2 = temp.next;
for (;;){
if (temp2.val == val) {
temp.next = temp2.next;
temp2 = temp2.next;
}else{
temp2 = temp2.next;
temp = temp.next;
}
if(temp2 == null){
break;
}
}
return listNode.next;
}