题目
给定单向链表的头指针和一个要删除的节点的值,定义一个函数删除该节点。
返回删除后的链表的头节点。
注意:此题对比原题有改动
示例 1:
输入: head = [4,5,1,9], val = 5
输出: [4,1,9]
解释: 给定你链表中值为 5 的第二个节点,那么在调用了你的函数之后,该链表应变为 4 -> 1 -> 9.
示例 2:
输入: head = [4,5,1,9], val = 1
输出: [4,5,9]
解释: 给定你链表中值为 1 的第三个节点,那么在调用了你的函数之后,该链表应变为 4 -> 5 -> 9.
说明:
- 题目保证链表中节点的值互不相同
- 若使用 C 或 C++ 语言,你不需要
free
或delete
被删除的节点
解题思路
1.题目要求我们定义一个函数删除给定节点。返回删除后的链表的头节点。
2.首先我们需要定义一个虚拟头节点,为了方便的删除头节点。让头节点dummy的next指向head。然后我们处理特殊情况判断链表是否为null,若链表为 null,我们直接返回 null。之后我们设置一个指针 temp 去遍历链表,若 temp.next.val != val 我们就让 temp = temp.next ,这么做是为了让 temp 找到目标节点的前一个节点,方便我们进行删除操作。当找到目标节点后我们就让 temp.next = temp.next.next ,删除目标节点,最后返回 dummy.next即可。
代码实现
class Solution {
public ListNode deleteNode(ListNode head, int val) {
ListNode dummy = new ListNode(0);
dummy.next = head;
ListNode temp = dummy;
if(head == null ){
return null;
}
while(temp.next.val != val){
temp = temp.next;
}
temp.next = temp.next.next;
return dummy.next;
}
}