链接
思路
首先对特殊情况进行判断:
1、空链表直接返回空
2、只有一个节点且该节点为要被删除的结点(返回空)
3、要删除的是头结点(返回头结点的下一节点)
4、普通情况(但是要注意的是最后一定要赋空,否则会导致删不掉最后一个)
代码
/**
* 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 || (head.val == val && head.next == null))
{
return null;
}
//空链表,只有一个结点且为删除结点
if (head.val == val)
{
return head.next;
}
//删除头结点
ListNode cur = head.next;
ListNode prev = head;
prev.next = cur;
while (cur != null)
{
if (cur.val != val)
{
prev.next = cur;
prev = cur;
cur = cur.next;
} else
{
cur = cur.next;
}
}
prev.next = null;
return head;
}
}