基于Python和C++实现删除链表的节点


Posted in Python onJuly 06, 2020

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

返回删除后的链表的头节点。

示例 1:

输入: head = [4,5,1,9], val = 5

输出: [4,1,9]

解释: 给定你链表中值为 5 的第二个节点,那么在调用了你的函数之后,该链表应变为 4 -> 1 -> 9.

示例 2:

输入: head = [4,5,1,9], val = 1

输出: [4,5,9]

解释: 给定你链表中值为 1 的第三个节点,那么在调用了你的函数之后,该链表应变为 4 -> 5 -> 9.

思路:

建立一个空节点作为哨兵节点,可以把首尾等特殊情况一般化,且方便返回结果,使用双指针将更加方便操作链表。

Python解法:

class ListNode:
  def __init__(self, x):
    self.val = x
    self.next = None


class Solution:
  def deleteNode(self, head: ListNode, val: int) -> ListNode:
    tempHead = ListNode(None) # 构建哨兵节点
    tempHead.next = head

    prePtr = tempHead # 使用双指针
    postPtr = head

    while postPtr:
      if postPtr.val == val:
        prePtr.next = postPtr.next
        break
      prePtr = prePtr.next
      postPtr = postPtr.next
    return tempHead.next

C++解法:

struct ListNode {
   int val;
   ListNode *next;
   ListNode(int x) : val(x), next(NULL) {}
 };

class Solution {
public:
  ListNode* deleteNode(ListNode* head, int val) {
    ListNode *tempHead = new ListNode(-1); // 哨兵节点,创建节点一定要用new!!!!!!!!!!!!!!
    tempHead->next = head;

    ListNode *prePtr = tempHead;
    ListNode *postPtr = head;

    while (postPtr) {
      if (postPtr->val == val) {
        prePtr->next = postPtr->next; // 画图确定指针指向关系,按照箭头确定指向
        break;
      }
      postPtr = postPtr->next;
      prePtr = prePtr->next;
    }
    return tempHead->next;
  }
};

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python logging模块学习笔记
May 24 Python
Python Tkinter GUI编程入门介绍
Mar 10 Python
在Linux下使用Python的matplotlib绘制数据图的教程
Jun 11 Python
python3.6 实现AES加密的示例(pyCryptodome)
Jan 10 Python
Python3中的列表生成式、生成器与迭代器实例详解
Jun 11 Python
ubuntu17.4下为python和python3装上pip的方法
Jun 12 Python
Python3.5基础之NumPy模块的使用图文与实例详解
Apr 24 Python
如何在Django项目中引入静态文件
Jul 26 Python
Pandas聚合运算和分组运算的实现示例
Oct 17 Python
Django Admin后台模型列表页面如何添加自定义操作按钮
Nov 11 Python
在python3.9下如何安装scrapy的方法
Feb 03 Python
Python下载商品数据并连接数据库且保存数据
Mar 31 Python
基于Python 的语音重采样函数解析
Jul 06 #Python
python interpolate插值实例
Jul 06 #Python
基于Python实现2种反转链表方法代码实例
Jul 06 #Python
简单了解Django项目应用创建过程
Jul 06 #Python
如何在mac下配置python虚拟环境
Jul 06 #Python
Python优秀开源项目Rich源码解析的流程分析
Jul 06 #Python
使用TensorBoard进行超参数优化的实现
Jul 06 #Python
You might like
用PHP实现的生成静态HTML速度快类库
2007/03/31 PHP
完美实现GIF动画缩略图的php代码
2011/01/02 PHP
php实现的zip文件内容比较类
2014/09/24 PHP
php计算给定时间之前的函数用法实例
2015/04/03 PHP
phpinfo() 中 Local Value(局部变量)Master Value(主变量) 的区别
2016/02/03 PHP
PHP pthreads v3下同步处理synchronized用法示例
2020/02/21 PHP
Javascript 中的类和闭包
2010/01/08 Javascript
javascript URL编码和解码使用说明
2010/04/12 Javascript
jquery的$(document).ready()和onload的加载顺序
2010/05/26 Javascript
jquery 操作表格实现代码(多种操作打包)
2011/03/20 Javascript
js函数的引用, 关于内存的开销
2012/09/17 Javascript
在Firefox下js select标签点击无法弹出
2014/03/06 Javascript
JQuery $.each遍历JavaScript数组对象实例
2014/09/01 Javascript
JavaScript正则表达式替换字符串中图片地址(img src)的方法
2017/01/13 Javascript
JS实现图片手风琴效果
2020/04/17 Javascript
JS解决position:sticky的兼容性问题的方法
2017/10/17 Javascript
JS获取子节点、父节点和兄弟节点的方法实例总结
2018/07/06 Javascript
解决eclipse中没有js代码提示的问题
2018/10/10 Javascript
react quill中图片上传由默认转成base64改成上传到服务器的方法
2019/10/30 Javascript
JQuery使用属性addClass、removeClass和toggleClass实现增加和删除类操作示例
2019/11/18 jQuery
js实现简单商品筛选功能
2021/02/02 Javascript
python使用pycharm环境调用opencv库
2018/02/11 Python
Python 经典面试题 21 道【不可错过】
2018/09/21 Python
解决Pandas的DataFrame输出截断和省略的问题
2019/02/08 Python
Python自动抢红包教程详解
2019/06/11 Python
Django基础三之视图函数的使用方法
2019/07/18 Python
python try except返回异常的信息字符串代码实例
2019/08/15 Python
Pytorch: 自定义网络层实例
2020/01/07 Python
python解析xml文件方式(解析、更新、写入)
2020/03/05 Python
Python运行提示缺少模块问题解决方案
2020/04/02 Python
HTML5实现视频弹幕功能
2019/08/09 HTML / CSS
Speedo澳大利亚官网:全球领先游泳品牌
2018/02/04 全球购物
销售行政专员职责
2014/01/03 职场文书
导师推荐信范文
2014/05/09 职场文书
2014年社区居委会主任重阳节讲话稿
2014/09/25 职场文书
学校远程教育工作总结
2015/08/11 职场文书