题干: 给定单向链表的头指针和一个要删除的节点的值,定义一个函数删除该节点。返回删除后的链表的头节点。
题解: 首先判断一下头结点是不是要删除的节点,如果是就将链表的头结点设置为下一个节点。然后判断p.next是不是要删除的节点。这里不能直接判断p节点是因为这不是双向链表,如果要删除p节点,就要将p节点的前一个节点的next指针指向p.next,这里不能得到p的前一个指针,所以不能直接判断p。
/**
* 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) {
for(ListNode p=head;p!=null;p=p.next){
if(head.val==val){
head = head.next;
break;
}
if(p.next!=null){
if(p.next.val==val){
p.next = p.next.next;
}
}
}
return head;
}
}