链表删除链表的节点( leetcode18)
Posted AI 菌
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了链表删除链表的节点( leetcode18)相关的知识,希望对你有一定的参考价值。
一、题目
给定单向链表的头指针和一个要删除的节点的值,定义一个函数删除该节点。
返回删除后的链表的头节点。
二、题解
本题是一道简单的套路题,首先回忆一下删除链表节点的操作:首先定义两个指针pre、curr;然后从首到尾遍历一次链表,如果要删除当前节点,只需要:pre->next = curr->next。
关键在于:head->val也有可能等于val,所以本题返回的不是head,而是第一个不等于val值的节点。具体做法也很简单,只需在遍历之前,加上:
while(head)
{
if(head->val == val)
head = head->next;
else
break;
}
三、实现
根据以上的分析,相应的C++实现如下:
/**
* 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) {
while(head)
{
if(head->val == val)
head = head->next;
else
break;
}
//此时的head是第一个不等于val的节点
ListNode* curr = head;
ListNode* pre = curr;
while(curr->next)
{
curr = curr -> next;
if(curr->val==val) // 如果等于,则删除当前节点;但不更新pre,因为curr->next 也有可能是val
pre->next = curr->next;
else
pre = curr; // 不相同,则更新pre
}
return head;
}
};
以上是关于链表删除链表的节点( leetcode18)的主要内容,如果未能解决你的问题,请参考以下文章
[LeetCode]剑指 Offer 18. 删除链表的节点
LeetCode(剑指 Offer)- 18. 删除链表的节点
LeetCode(剑指 Offer)- 18. 删除链表的节点