请编写一个函数,用于 删除单链表中某个特定节点 。在设计函数时需要注意,你无法访问链表的头节点head ,只能直接访问要被删除的节点 。

class ListNode {
int val;
ListNode next;
ListNode() {}
ListNode(int val) { this.val = val; }
ListNode(int val, ListNode next) { this.val = val; this.next = next; }
}

/**
* 请编写一个函数,用于 删除单链表中某个特定节点 。在设计函数时需要注意,你无法访问链表的头节点head ,只能直接访问要被删除的节点 。
* 题目数据保证需要删除的节点 不是末尾节点
* @param node
*/
public void deleteNode(ListNode node) {
node.val = node.next.val;
node.next=node.next.next;
}

  代码就这么点。不难,但是当时也是想了一段时间没想出来。
  由于不能访问头节点,我们就不能操作这个要删除的节点的前一个节点,所不能想着通过头节点来解决。


  代码也很简单,其实就两步:这里假设我们要删的是 4 这个节点。

 

  将 4 的下一个节点的value赋给 4这个节点的value;

  node.val = node.next.val;

就得到:

  

 

 

   接下来,直接将原来的 4 节点指向 4 的下一个节点的下一个节点 

  node.next=node.next.next;

就得到:

 

     感觉有点狸猫换太子的意思。

posted @ 2021-12-09 23:55  whisper_ac  阅读(175)  评论(0)    收藏  举报