链表的数据结构就是每一个节点和下一个节点是链接在一起的。
思路: 定义一个哑元节点 找到要删除节点的前一个节点 删除的前一个节点的下一个节点就是要删除的节点,那么删除的前一个节点的下下个节点就是删除节点的前一个节点的下一个节点。
注意删除的节点是最后一个节点的情况。
/**
* @author xienl
* @description AB12 删除链表的节点
* @date 2022/6/1
*/
public class Solution {
public static void main(String[] args) {
Solution solution = new Solution();
ListNode node = new ListNode(4, new ListNode(5, new ListNode(1, new ListNode(9))));
node = solution.deleteNode(node, 1);
node.print();
}
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param head ListNode类
* @param val int整型
* @return ListNode类
*
* 思路: 定义一个哑元节点
* 找到要删除节点的前一个节点
* 删除的前一个节点的下一个节点就是要删除的节点,那么删除的前一个节点的下下个节点就是删除节点的前一个节点的下一个节点。
*/
public ListNode deleteNode (ListNode head, int val) {
// write code here
// 定义一个哑元节点
ListNode dummy = new ListNode(-1);
dummy.next = head;
// 定义下一个节点
ListNode next = dummy;
// 如果下一个节点不等于null,并且他的值也不等于我们要删除的节点,当前节点变成下一个节点
while (next.next != null && next.next.val != val){
next = next.next;
}
// 取下下个节点当下一个节点
next.next = next.next == null ? null : next.next.next;
return dummy.next;
}
}
class ListNode {
int val;
ListNode next = null;
public ListNode(int val) {
this.val = val;
}
public ListNode(int val, ListNode next){
this.val = val;
this.next = next;
}
public void print(){
System.out.print(this.val + " ");
if (this.next != null){
this.next.print();
}
}
}
六一儿童节快乐。一起刷题的私聊哈