题目:在O(1)时间内删除链表结点,给定单向链表的头指针和一个节点指针,定义一个函数在O(1)时间内删除该节点。
思路:
①如果该节点不是尾节点,那么可以直接将下一个节点的值赋给该节点,然后令该节点指向下下个节点。在删除下一个节点,时间复杂度O(1)
②否则,就需要先遍历链表,找到节点的前一个节点,然后让前一个节点指向null,时间复杂度为O(N)
代码如下
public ListNode deleteNode(ListNode head, ListNode tobeDelete) {
if (head == null || head.next == null || tobeDelete == null)
return null;
if (tobeDelete.next != null) {
// 要删除的节点不是尾节点
ListNode next = tobeDelete.next;
tobeDelete.val = next.val;
tobeDelete.next = next.next;
} else {
ListNode cur = head;
while (cur.next != tobeDelete)
cur = cur.next;
cur.next = null;
}
return head;
}
本文介绍了一种在O(1)时间内删除单向链表中指定节点的方法,通过直接复制下一个节点的值并调整指针,或者找到前驱节点进行删除操作,详细讨论了非尾节点和尾节点的处理方式。
436

被折叠的 条评论
为什么被折叠?



