
思路:使用一个或者两个指针定位,检测head节点val是否等于value,如果等于就直接返回head.next。
检测指针的下一个节点val值是不是等于val,倘若等于,就另指针的下一个元素指向下下个元素(可能为null,不影响),此时返回head节点即可。 循环到结束没找到符合条件的节点,也直接返回head即可。
注意:假如题中给的不是val值,而是要删除的节点,则判断节点的next是不是null,如果是null。从head开始遍历,找到这个节点的上个节点,令其next=null即可。如果目标节点的next不为null,可以把它的val值改为下一个节点的val值,并且令 node.next=node.next.next。完成了删除操作。
代码:
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/
class Solution {
public ListNode deleteNode(ListNode head, int val) {
if(head==null){
return head;
}
if(head.val==val){
head=head.next;
return head;
}
ListNode node = head;
while(node.next!=null){
if(node.next.val==val){
node.next=node.next.next;
return head;
}
node=node.next;
}
return head;
}
}
这个代码思路错了,以为给的是要删除的节点。
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/
class Solution {
public ListNode deleteNode(ListNode head, int val) {
if(head==null){
return null;
}
if(head.val==val){
head=head.next;
return head;
}
ListNode node =head;
while(node.next!=null){
node=node.next;
if(node.val==val){
if(node.next!=null){
node.val=node.next.val;
node.next=node.next.next;
return head;
}else{
ListNode node1 =head;
while(node1.next.val!=val){
node1=node1.next;
}
node1.next=null;
return head;
}
}
}
return head;
}
}
单链表删除指定节点的两种解法

本文探讨了如何在单链表中删除具有特定值的节点。首先介绍了一个错误的解决方案,该方案假设给定的是要删除的节点。然后提供了修正后的正确代码,包括检查头节点和在链表中遍历寻找目标节点的过程,同时处理了目标节点的next为null和不为null的情况。
413

被折叠的 条评论
为什么被折叠?



