本文正在参加「Java主题月 – Java 刷题打卡」,详情查看 活动链接
题目
描述
给定单向链表的头指针和一个要删除的节点的值,定义一个函数删除该节点。
返回删除后的链表的头节点。
**注意:**此题对比原题有改动
示例 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.
实现方法
方法 1
思路
- 要删除一个节点,首先需要找到这个节点,然后删除该节点的引用即可;
- 首先定位节点:如果
head.next.val == val
,说明找到了该节点; - 接着删除节点:
head.next = head.next.next
- 主要操作为遍历链表,直到定位确切节点,所以时间复杂度为 ;
实现
public ListNode deleteNode(ListNode head, int val) {
// 边界条件
if(head == null){
return head;
}
// 当要删除的值是第一个值时,直接返回接下来的链表值即可
if(head.val == val){
return head.next;
}
ListNode current = head;
// 找到要删除节点的前一个节点
while(current.next != null && current.next.val != val){
current = current.next;
}
// 删除节点,,即跳过要删除的节点,next 指针指向要删除节点的下一个节点
current.next = current.next.next;
return head;
}
复制代码
方法 2
思路
利用递归的方法,首先找到递归结束的条件,也就是找到我们所要删除的节点,此时 head.val == val
,然后调用递归即可;
实现
public ListNode deleteNode(ListNode head, int val) {
if(head.val == val)
return head.next;
head.next = deleteNode(head.next,val);
return head;
}
复制代码
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END