在O(1)时间删除链表节点-18-1
给定单向链表的一个节点指针,定义一个函数在O(1)时间删除该结点。
假设链表一定存在,并且该节点一定不是尾节点。
样例
输入:链表 1->4->6->8
删掉节点:第2个节点即6(头节点为第0个节点)
输出:新链表 1->4->8
思路:
public class Solution018 {
/**
* 在O(1)时间内删除链表节点
*
* @param head 链表的头结点
* @param toBeDeleted 待删除的节点
*/
public void deleteNode(ListNode head, ListNode toBeDeleted) {
// 链表中只有一个节点,那么待删除的节点既是头结点,又是尾节点
if (head == toBeDeleted && head.next == null)
head = null;
// 待删除的节点为尾节点
if (toBeDeleted.next == null) {
ListNode temp = head;
while (temp.next != toBeDeleted)
temp = temp.next;
temp.next = null;
} else { // 待删除的节点不是尾节点
toBeDeleted.val = toBeDeleted.next.val;
toBeDeleted.next = toBeDeleted.next.next;
}
}
}