首页 > 编程语言 >LeetCode_LinkedList_19. Remove Nth Node From End of List 删除链表的倒数第 N 个结点(C++)【双指针,一次遍历】

LeetCode_LinkedList_19. Remove Nth Node From End of List 删除链表的倒数第 N 个结点(C++)【双指针,一次遍历】

时间:2022-10-27 16:31:42浏览次数:64  
标签:Node head ListNode list next 链表 End 节点


目录

​一,题目描述​

​英文描述​

​中文描述​

​二,解题思路​

​三,AC代码​

​C++​

​四,解题过程​

​第一博​


 

一,题目描述

英文描述

Given the head of a linked list, remove the nth node from the end of the list and return its head.


Example 1:

LeetCode_LinkedList_19. Remove Nth Node From End of List 删除链表的倒数第 N 个结点(C++)【双指针,一次遍历】_中等


Example 2:

LeetCode_LinkedList_19. Remove Nth Node From End of List 删除链表的倒数第 N 个结点(C++)【双指针,一次遍历】_两个指针_02

Example 3:

LeetCode_LinkedList_19. Remove Nth Node From End of List 删除链表的倒数第 N 个结点(C++)【双指针,一次遍历】_中等_03

Constraints:

The number of nodes in the list is sz.
1 <= sz <= 30
0 <= Node.val <= 100
1 <= n <= sz

Follow up: Could you do this in one pass?

中文描述

给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。

进阶:你能尝试使用一趟扫描实现吗?


示例 1:

LeetCode_LinkedList_19. Remove Nth Node From End of List 删除链表的倒数第 N 个结点(C++)【双指针,一次遍历】_中等_04


示例 2:

LeetCode_LinkedList_19. Remove Nth Node From End of List 删除链表的倒数第 N 个结点(C++)【双指针,一次遍历】_两个指针_05


示例 3:

LeetCode_LinkedList_19. Remove Nth Node From End of List 删除链表的倒数第 N 个结点(C++)【双指针,一次遍历】_删除节点_06

提示:

链表中结点的数目为 sz
1 <= sz <= 30
0 <= Node.val <= 100
1 <= n <= sz

来源:力扣(LeetCode)
链接:​​​https://leetcode-cn.com/problems/remove-nth-node-from-end-of-list​​ 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

二,解题思路

链表问题中一个难点就是计数。因为没有相应的索引或者属性来标明当前位置,所以必须通过遍历来确定链表节点数量和位置,然而针对本题,有一个简单的技巧来判断位置,即双指针法。

与之前判断循环链表的双指针法不同,这里的两个指针移速相同,即每轮只向前移动一步,但是两个指针的间距不同,在本题中为n。(这里假设n=2) 

提到链表删除节点,必须要想起前驱节点,只有知道待删除节点的前驱节点,才能顺利完成删除操作。 

由于删除的节点可能是头节点,为了简化程序,这里设计一个虚拟头节点h,h->next指向head。

LeetCode_LinkedList_19. Remove Nth Node From End of List 删除链表的倒数第 N 个结点(C++)【双指针,一次遍历】_两个指针_07

 

LeetCode_LinkedList_19. Remove Nth Node From End of List 删除链表的倒数第 N 个结点(C++)【双指针,一次遍历】_两个指针_08

p->next = p->next->next,返回h->next即可

 

三,AC代码

C++

/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode() : val(0), next(nullptr) {}
* ListNode(int x) : val(x), next(nullptr) {}
* ListNode(int x, ListNode *next) : val(x), next(next) {}
* };
*/
class Solution {
public:
ListNode* removeNthFromEnd(ListNode* head, int n) {
ListNode* h = new ListNode;
h->next = head;
ListNode* p = h, * q = head;
for(int i = 0; i < n; i++) q = q->next;
while(q != nullptr) {
p = p->next;
q = q->next;
}
p->next = p->next->next;
return h->next;
}
};

四,解题过程

第一博

一发入魂

LeetCode_LinkedList_19. Remove Nth Node From End of List 删除链表的倒数第 N 个结点(C++)【双指针,一次遍历】_两个指针_09

 

标签:Node,head,ListNode,list,next,链表,End,节点
From: https://blog.51cto.com/u_15849465/5801580

相关文章

  • LeetCode_LinkedList_82. Remove Duplicates from Sorted List II 删除排序链表中的重
    目录​​一,题目描述​​​​英文描述​​​​中文描述​​​​二,解题思路​​​​三,AC代码​​​​C++​​​​四,解题过程​​​​第一博​​一,题目描述英文描述Giventheh......
  • 单向链表
    单向链表链表的简介链表和数组一样,可以用于存储一系列的元素,但是链表和数组的实现机制完全不同。链表的每个元素由一个存储元素本身的节点和一个指向下一个元素的引用(有......
  • 安装OpenDDS
    之后的程序要用到OpenDDS,记录一下安装过程。1、下载OpenDDS安装包,安装平台是Windows。我下载的是OpenDDS-3.21,解压后放在D盘。Indexof/OpenDDS/previous-releases(obj......
  • nodejs实现jwt
    jwt是jsonwebtoken的简称,本文介绍它的原理,最后后端用nodejs自己实现如何为客户端生成令牌token和校验token1.为什么需要会话管理我们用nodejs为前端或者其他服务提供......
  • 解决vue报错 Failed to mount component: template or render function not defined.
    今天npmrundev的时候,有个页面报错,提示[Vuewarn]:Failedtomountcomponent:templateorrenderfunctionnotdefined.昨天还好好的,今天就报错了,也没改啥。经过查资......
  • React高级特性之Render Props
    renderprop是一个技术概念。它指的是使用值为function类型的prop来实现Reactcomponent之间的代码共享。如果一个组件有一个render属性,并且这个render属性的值为一个返......
  • leetcode 234. 回文链表 js 实现
    给你一个单链表的头节点head,请你判断该链表是否为回文链表。如果是,返回true;否则,返回false。 示例1:输入:head=[1,2,2,1]输出:true示例2:输入:head=[1,2]输出......
  • 数据结构 玩转数据结构 4-1 什么是链表
    0课程地址https://coding.imooc.com/lesson/207.html#mid=13429 1重点关注1.1什么是链表数据存在节点中的一种线性数据结构  1.2......
  • leetcode 206. 反转链表 js实现
    给你单链表的头节点head,请你反转链表,并返回反转后的链表。 示例1:输入:head=[1,2,3,4,5]输出:[5,4,3,2,1]示例2:输入:head=[1,2]输出:[2,1]示例3:输入:head=[]输出......
  • Node.JS 安装(Windows 和 Linux )
    1、Linux版采用YUM方式安装。1.1、卸载旧版本查看旧版本:rpm-qa|grepnodejs卸载:卸载过程中输入y确认yumremovenodejs1.2、安装1.2.1、Hint官......