| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 数据结构与算法 -> 【leetcode】删除链表的倒数第 N 个结点 c++ python -> 正文阅读 |
|
[数据结构与算法]【leetcode】删除链表的倒数第 N 个结点 c++ python |
题目描述: c++代码:
先遍历一遍得到链表总长,再从头遍历一遍找到要删除节点的前一个节点a,把a->next赋值为a->next->next。 注意特殊情况,当要删除的节点为头节点,按照遍历找前一个节点的方法找不到前一个节点a,应当直接返回头节点的下一个节点head->next。
只遍历一遍:因为要对倒数第n个节点操作,先进后出,使用栈。 ListNode* behind = s.pop()->next->next; 特殊情况,要删除的是头节点,执行n次pop后,栈为空,此时无法更新赋值。 为解决特殊情况需要一个工具头节点head2,指向原链表头节点,保证节点全部删除时栈不为空,栈内还有工具头节点,可以更新赋值。注意最后返回head2->next。 python代码:
双指针法: 使用两个指针left,right来分别标识该段链表的前一个节点和该段链表的最后一个节点。 因为长度为n,先让right向右移动 n-1 位,使得从头节点head开始到当前right的链表长度有n; 但为了删除节点,需要left为长为n的链表的前一个节点,即现在得到的left需要向左移动一位,即left比right向右移动的位数少1,只需要让left从头节点head的前一个节点(新建的工具头节点head2)开始,而right正常从head开始即可。 注意补充特殊情况的处理:当left移动完还是head2说明left没有移动,链表的长度为1,直接返回None。 注意: 2.记录新头节点,以在对链表进行变换后返回变换后的链表的头节点 3.对于可能涉及头节点删除插入的变换,需要new一个新的工具头节点head2放在原头节点的前面,最后返回head2->next 4.提取问题的关键,转化问题。如链表中删除节点的关键是找到要删除的节点的前一个节点,以对其next重新赋值。 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/26 15:38:23- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |