从单链表中删除指定节点

只给了一个参数,就是要删除的结点。由于是单链表,可以访问下一个结点,但是无法访问上一个结点。解决的方法是把下一个结点的内容复制到当前的结点,然后删除下一个结点。

private static bool DeleteNode<T>(LinkedListNode<T> n)
{
    if (n == null || n.Next == null)
    {
        return false;
    }

    LinkedListNode<T> next = n.Next;
    n.Data = next.Data;
    n.Next = next.Next;

    return true;
}

这道题目看似简单,但是有一个坑,就是如果给定结点是链表的最后一个结点该怎么办。上述代码排除这种情况,返回了 false,意味着删除失败。面试时应该指出存在这个问题,并和面试官讨论如何解决这种特殊情况。