基于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实现统计代码行的方法分析
Jul 12 Python
tf.truncated_normal与tf.random_normal的详细用法
Mar 05 Python
python中yaml配置文件模块的使用详解
Apr 27 Python
python输出100以内的质数与合数实例代码
Jul 08 Python
Python实现简易过滤删除数字的方法小结
Jan 09 Python
python使用socket实现的传输demo示例【基于TCP协议】
Sep 24 Python
Python 实现顺序高斯消元法示例
Dec 09 Python
django-利用session机制实现唯一登录的例子
Mar 16 Python
python 使用多线程创建一个Buffer缓存器的实现思路
Jul 02 Python
基于python爬取梨视频实现过程解析
Nov 09 Python
python学习之使用Matplotlib画实时的动态折线图的示例代码
Feb 25 Python
Python爬虫之爬取最新更新的小说网站
May 06 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初学入门
2006/11/19 PHP
php中用加号与用array_merge合并数组的区别深入分析
2013/06/03 PHP
php 解析xml 的四种方法详细介绍
2016/10/26 PHP
Laravel中unique和exists验证规则的优化详解
2018/01/28 PHP
centos7上编译安装php7以php-fpm方式连接apache
2018/11/08 PHP
解决火狐浏览器下JS setTimeout函数不兼容失效不执行的方法
2012/11/14 Javascript
JS实现标签页效果(配合css)
2013/04/03 Javascript
原生javascript实现DIV拖拽并计算重复面积
2015/01/02 Javascript
完善的jquery处理机制
2016/02/21 Javascript
使用NodeJs 开发微信公众号(三)微信事件交互实例
2016/03/02 NodeJs
javascript实现数组去重的多种方法
2016/03/14 Javascript
浅析angularJS中的ui-router和ng-grid模块
2016/05/20 Javascript
初识简单却不失优雅的Vue.js
2016/09/12 Javascript
react-native 封装选择弹出框示例(试用ios&android)
2017/07/11 Javascript
JavaScript基础心法 深浅拷贝(浅拷贝和深拷贝)
2018/03/05 Javascript
Vuerouter的beforeEach与afterEach钩子函数的区别
2018/12/26 Javascript
vue项目中引入vue-datepicker插件的详解
2019/05/14 Javascript
vue.js 2.0实现简单分页效果
2019/07/29 Javascript
微信小程序停止其他视频播放当前视频的实例代码
2019/12/25 Javascript
分享8个JavaScript库可更好地处理本地存储
2020/10/12 Javascript
Python基本语法经典教程
2016/03/11 Python
Python Web框架Tornado运行和部署
2020/10/19 Python
Python中with及contextlib的用法详解
2017/06/08 Python
bluepy 一款python封装的BLE利器简单介绍
2019/06/25 Python
Python中常用的os操作汇总
2020/11/05 Python
canvas实现按住鼠标移动绘制出轨迹的示例代码
2018/02/05 HTML / CSS
BIFFI美国站:意大利BIFFI BOUTIQUES豪华多品牌时装零售公司
2020/02/11 全球购物
大唐电信科技股份有限公司java工程师面试经历
2016/12/09 面试题
总经理岗位职责说明书
2014/07/30 职场文书
党员学习党的群众路线思想汇报(5篇)
2014/09/10 职场文书
人身意外保险授权委托书
2014/10/01 职场文书
客房领班岗位职责
2015/02/11 职场文书
团委副书记工作总结
2015/08/14 职场文书
大学生奶茶店创业计划书
2019/06/25 职场文书
Win11运行育碧游戏总是崩溃怎么办 win11玩育碧游戏出现性能崩溃的解决办法
2022/04/06 数码科技
《堡垒之夜》联动《刺客信条》 4月7日正式上线
2022/04/06 其他游戏