【链表】删除链表的节点( leetcode18)

举报
AI 菌 发表于 2021/08/05 00:28:25 2021/08/05
【摘要】 一、题目 给定单向链表的头指针和一个要删除的节点的值,定义一个函数删除该节点。 返回删除后的链表的头节点。 12 二、题解 本题是一道简单的套路题,首先回忆一下删除链表节点的操作:首先定义两个指针pre、curr;然后从首到尾遍历一次链表,如果要删除当前节点,只需要:pre->next = curr->next。 关键在于:head->v...

一、题目

给定单向链表的头指针和一个要删除的节点的值,定义一个函数删除该节点。
返回删除后的链表的头节点。

  
 
  • 1
  • 2

在这里插入图片描述
在这里插入图片描述

二、题解

本题是一道简单的套路题,首先回忆一下删除链表节点的操作:首先定义两个指针pre、curr;然后从首到尾遍历一次链表,如果要删除当前节点,只需要:pre->next = curr->next。

关键在于:head->val也有可能等于val,所以本题返回的不是head,而是第一个不等于val值的节点。具体做法也很简单,只需在遍历之前,加上:

while(head)
{ if(head->val == val) head = head->next; else break;
 }

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

三、实现

根据以上的分析,相应的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; }
};

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32

文章来源: ai-wx.blog.csdn.net,作者:AI 菌,版权归原作者所有,如需转载,请联系作者。

原文链接:ai-wx.blog.csdn.net/article/details/118465374

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。