在O(1)时间复杂度删除链表节点
题目:
描述
给定一个单链表中的一个等待被删除的节点(非表头或表尾)。请在在 O(1) 时间复杂度删除该链表节点。
样例
样例 1:
输入:
1->2->3->4->null
3
输出:
1->2->4->null
样例 2:
输入:
1->3->5->null
3
输出:
1->5->null
解题思路:需要在O(1)时间复杂度,无法更改前一节点的属性,所以只能更改本节点,因此将next的val覆盖到本节点,然后删除本节点的下一节点即可
/**
* Definition for ListNode.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int val) {
* this.val = val;
* this.next = null;
* }
* }
*/
public class Solution {
/*
* @param node: the node in the list should be deleted
* @return: nothing
*/
public void deleteNode(ListNode node) {
// write your code here
if(node == null) {
return ;
}
ListNode nextNode = node.next;
node.val = nextNode.val;
node.next = nextNode.next;
}
}