2023.5.21 删除链表节点
2022.5.12 删除链表节点
来源:Leetcode;
题目描述:
给定单向链表的头指针和一个要删除的节点的值,定义一个函数删除该节点,返回删除后的链表的头节点。
说明:
- 题目保证链表中节点的值互不相同
- 若使用 C 或 C++ 语言,你不需要
free或delete被删除的节点
解题思路:
- 分析题目,删除链表中某一个特定的值。所以逻辑是 :找到该值所在的节点,然后删除这个节点
实现:
第一步:找值。首先,如果是首节点为需要被删除,那么返回head->next即可(特殊情况)。其次,考虑在链表中,删除和插入操作是需要知晓:前中后三个节点,而由于链表是单向性。所以需要设置一个“慢一点”的指针,便于进行后续操作。写一个while循环,条件为head->next->val是否等于指定值。
第二步:删除。找到值后,需要将前一个节点保存(pre),也要保存当前节点(cur)。pre->next=cur->next;因为题目给出不需要释放内存,则已经完成。
代码:
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
ListNode* deleteNode(ListNode* head, int val) {
ListNode *h=head;
if(head->val ==val)
{
head=head->next;
return head;
}
while(head->next->val !=val)
{head=head->next;}
ListNode *pre=head;ListNode *cur=head->next;
pre->next=cur->next;
return h;
}
};

浙公网安备 33010602011771号