删除链表的节点

Posted wylwyl

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了删除链表的节点相关的知识,希望对你有一定的参考价值。

题目:

在O(1)时间内删除链表节点。给定单向链表的头指针和一个节点指针,定义一个函数在O(1)时间内删除该节点。

 

解答:

 1 public class Solution {
 2 
 3     public static void deleteNode(ListNode head, ListNode node) {
 4         if(head == null || node == null) {
 5             return;
 6         }
 7 
 8         // 待删除的节点不是尾节点
 9         if(node.next != null) {
10             ListNode tmp = node.next;
11             node.val = tmp.val;
12             node.next = tmp.next;
13         } else if(node == head) { // 头节点
14             head = head.next;
15             node = null;
16         } else {
17             // 尾节点
18             ListNode tmp = head;
19             while(tmp.next != node) {
20                 tmp = tmp.next;
21             }
22 
23             tmp.next = null;
24             node = null;
25         }
26     }
27 }

 

技术图片

 

以上是关于删除链表的节点的主要内容,如果未能解决你的问题,请参考以下文章

剑指offer--18删除链表的节点

LeetCode 2095. 删除链表的中间节点

剑指offer18删除链表的(重复)节点

Java中双向链表的代码实现

LC 删除链表的倒数第N个节点

简单算法21.删除链表的结点