解析

1 如果不是尾节点,将要删除节点后继节点的值赋予当前节点,再将当前节点后继指向后继的后继,达到目的
2 如果是尾节点,则遍历至前一个节点,直接将前一个节点的后继指向null
时间复杂度分析:如果进行N次操作,N-1种可能性不会死尾节点,则操作次数为N-1,一种可能性为尾节点,操作次数为N。
所以总操作次数为2N-1.平均复杂度为2N-1/N = O(1)

代码:

public ListNode deleteNode(ListNode head, ListNode tobeDelete){
 if (head == null || tobeDelete == null)
  return null; 
  if (tobeDelete.next != null) {
   // 要删除的节点不是尾节点 
   ListNode next = tobeDelete.next;
    tobeDelete.val = next.val; 
    tobeDelete.next = next.next; 
    }
   else {
      if (head == tobeDelete) 
      // 只有一个节点 
      head = null;
      else {
        ListNode cur = head;
        while (cur.next != tobeDelete){
          cur = cur.next; 
          }
          cur.next = null; 
        }
     }
         return head;
   }