1 题目链接
https://www.nowcoder.com/exam/oj/ta?page=1&tpId=13&type=13
2 题目
3 思路 & 答案
这道题可以分为三种情况:
- 链表长度为0
- 链表长度不为0
- 要删除的节点是头节点
- 要删除的节点不是头节点
注意
题目中说明了,链表中节点的值各不相同
情况一:链表长度为0
留意题目中所给的链表长度的范围,可以是0。所以,当链表长度为0时,直接返回null
情况二:链表长度不为0,且要删除的节点就是头节点
将头指针head向后移一位,然后直接返回head即可
【说明:橘黄色×表示要删除的节点】
情况三:链表长度不为0,且要删除的节点不是头节点
- 定义两个指针,一个pre,开始时指向head;一个now,开始时指向head.next
- 每次都将pre和now往后移动一位,直到now指向要删除的节点
pre指向节点的next的值
赋值为now节点的next值
【说明:橘黄色×表示要删除的节点】
代码
import java.util.*;
/*
* public class ListNode {
* int val;
* ListNode next = null;
* public ListNode(int val) {
* this.val = val;
* }
* }
*/
public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
* @param head ListNode类
* @param val int整型
* @return ListNode类
*/
public ListNode deleteNode(ListNode head, int val) {
//情况一:链表长度为0
if (head == null) {
return null;
}
//情况二:要删除的节点是头节点
if (head.val == val) {
return head.next;
}
//情况三:要删除的节点不是头节点
ListNode pre = head;
ListNode now = head.next;
while (now.val!=val){
pre = now;
now = now.next;
}
pre.next = now.next;
return head;
}
}