问题描述
给定一个链表中的某个节点(非链表最后一个节点),要求删除这个节点(可以不必在内存中删除,只要求链表中没有这个值的节点即可)。题目链接:**点我**
样例输入输出
输入:head = [4,5,1,9], node = 1
输出:[4, 5, 9]
输入:head = [4,5,1,9], node = 5
输出:[4, 1, 9]
问题解法
此题跟常规的删除链表节点不一样,常规的是需要知道头节点,然后从链表中将这个节点剔除。但是本题并没有给头节点,同时并不要求这个节点从链表中实质删除这个节点,说明可以删除其他节点,只要链表的数量比原先少1,且顺序保持不变即可。所以,可以把后续的节点值往前移,删除最后一个节点。代码如下
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
   | 
 
 
 
 
 
 
  class Solution {     public void deleteNode(ListNode node) {         ListNode prev = node;         while (node.next != null) {             node.val = node.next.val;             prev = node;             node = node.next;         }
          prev.next = null;     } }
 
  | 
 
优化一点的做法是,直接将下个节点的值赋给当前节点,然后删除下个节点,这样后续的节点都不用改变。代码如下
1 2 3 4 5 6 7 8 9 10 11 12 13 14
   | 
 
 
 
 
 
 
  class Solution {     public void deleteNode(ListNode node) {         node.val = node.next.val;         node.next = node.next.next;     } }
 
  | 
 
参考资料
https://leetcode.cn/problems/delete-node-in-a-linked-list/solution/shan-chu-lian-biao-zhong-de-jie-dian-by-x656s/