[LeetCode] 237. Delete Node in a Linked List
Posted arcsinw
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[LeetCode] 237. Delete Node in a Linked List相关的知识,希望对你有一定的参考价值。
Description
Write a function to delete a node (except the tail) in a singly linked list, given only access to that node.
Given linked list -- head = [4,5,1,9], which looks like following:
Example 1:
Input: head = [4,5,1,9], node = 5
Output: [4,1,9]
Explanation: You are given the second node with value 5, the linked list should become 4 -> 1 -> 9 after calling your function.
Example 2:
Input: head = [4,5,1,9], node = 1
Output: [4,5,9]
Explanation: You are given the third node with value 1, the linked list should become 4 -> 5 -> 9 after calling your function.
Note:
- The linked list will have at least two elements.
- All of the nodes‘ values will be unique.
- The given node will not be the tail and it will always be a valid node of the linked list.
- Do not return anything from your function.
Analyse
从单链表中删除一个节点,但只给要删除的节点的指针,不提供指针的头节点
没有指针的头节点就拿不到要删除的节点的前一个结点,平时删除节点的方法就无法使用了
可以使用类似于数组的删除,将该节点后续的元素前移,然后删除尾节点就行了
void deleteNode(ListNode* node) {
ListNode* tmp = node;
while(tmp->next)
{
tmp->val = tmp->next->val;
if (tmp->next->next)
{
tmp = tmp->next;
}
else
{
tmp->next = nullptr;
return;
}
}
}
上面的方法很蠢,完全漠视了链表的特性,每个节点无需保存在连续的内存中,所以后续的节点不用都往前移动
先将要删除的节点node
的后面一个节点node->next
的值复制到要删除的节点node
里,然后将node->next
指向node->next->next
就行了
void deleteNode(ListNode* node) {
node->val = node->next->val;
node->next = node->next->next;
}
以上是关于[LeetCode] 237. Delete Node in a Linked List的主要内容,如果未能解决你的问题,请参考以下文章
LeetCode笔记:237. Delete Node in a Linked List
[LeetCode]237. Delete Node in a Linked List
LeetCode OJ 237Delete Node in a Linked List
[LeetCode] 237. Delete Node in a Linked List