基于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开启多个子进程并行运行的方法
Apr 18 Python
python网络编程调用recv函数完整接收数据的三种方法
Mar 31 Python
Python验证文件是否可读写代码分享
Dec 11 Python
实践Vim配置python开发环境
Jul 02 Python
Python 3.x 判断 dict 是否包含某键值的实例讲解
Jul 06 Python
Python使用pymongo模块操作MongoDB的方法示例
Jul 20 Python
python 2.7.13 安装配置方法图文教程
Sep 18 Python
Python 通过打码平台实现验证码的实现
May 13 Python
Python函数的返回值、匿名函数lambda、filter函数、map函数、reduce函数用法实例分析
Dec 26 Python
python接入支付宝的实例操作
Jul 20 Python
Pandas对每个分组应用apply函数的实现
Dec 13 Python
Python极值整数的边界探讨分析
Sep 15 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脚本在Linux下用md5函数加密字符串的方法
2015/06/29 PHP
PHP图像处理技术实例总结【绘图、水印、验证码、图像压缩】
2018/12/08 PHP
php 使用 __call实现重载功能示例
2019/11/18 PHP
AJAX架构之Dojo篇
2007/04/10 Javascript
最佳JS代码编写的14条技巧
2011/01/09 Javascript
JavaScript执行顺序详细介绍
2013/12/04 Javascript
JavaScript代码复用模式详解
2014/11/07 Javascript
JavaScript中的立即执行函数表达式介绍
2015/03/15 Javascript
JS实现带鼠标效果的头像及文章列表代码
2015/09/27 Javascript
js调出上下文菜单的实例
2015/12/17 Javascript
jQuery实现的无限级下拉菜单功能示例
2016/09/12 Javascript
利用js查找数组中指定元素并返回该元素的所有索引示例
2017/03/29 Javascript
利用Vue.js+Node.js+MongoDB实现一个博客系统(附源码)
2017/04/24 Javascript
关于vue-router的beforeEach无限循环的问题解决
2017/09/09 Javascript
JS基于正则表达式实现的密码强度验证功能示例
2017/09/21 Javascript
ES6 javascript中Class类继承用法实例详解
2017/10/30 Javascript
layer 刷新某个页面的实现方法
2019/09/05 Javascript
详解webpack打包vue项目之后生成的dist文件该怎么启动运行
2019/09/06 Javascript
详解从vue-loader源码分析CSS Scoped的实现
2019/09/23 Javascript
js实现ajax的用户简单登入功能
2020/06/18 Javascript
详解JavaScript 事件流
2020/09/02 Javascript
[01:43]倾听DOTA2英雄之声 魅惑魔女国服配音鉴赏
2013/06/06 DOTA
初步解析Python中的yield函数的用法
2015/04/03 Python
python验证码识别教程之利用投影法、连通域法分割图片
2018/06/04 Python
Python列表切片常用操作实例解析
2019/12/16 Python
Pycharm导入anaconda环境的教程图解
2020/07/31 Python
Vans奥地利官方网站:美国原创极限运动潮牌
2018/09/30 全球购物
英语硕士生求职简历的自我评价
2013/10/15 职场文书
基层党员公开承诺书
2014/05/29 职场文书
护理专科学生自荐书
2014/07/05 职场文书
推普周活动总结
2014/08/28 职场文书
我的中国心演讲稿
2014/09/04 职场文书
自我检讨报告
2015/01/28 职场文书
红色革命电影观后感
2015/06/18 职场文书
2015年小学语文教师工作总结
2015/10/23 职场文书
管理者日常工作必备:22条企业管理流程模板!
2019/07/12 职场文书