博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Leetcode刷题笔记 19. 删除链表的倒数第N个节点
阅读量:3748 次
发布时间:2019-05-22

本文共 1398 字,大约阅读时间需要 4 分钟。

19. 删除链表的倒数第N个节点

知识点:快慢指针、链表

时间:2020年10月18日
题目链接:

题目

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

示例1

输入
给定一个链表: 1->2->3->4->5, 和 n = 2.

输出:

当删除了倒数第二个节点后,链表变为 1->2->3->5.

说明:

给定的 n 保证是有效的。

进阶:

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

解法

  1. 快慢指针 快的指针比慢的快n个节点
  2. 快慢指针一起走 快指针到尾节点的时候 慢指针到倒数第n个节点了。
  3. 注意如果删除的是头节点,返回头节点的next

代码

#include 
#include
using namespace std;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 *fast = head; ListNode *slow = head; while(n--) fast = fast->next; //特殊判断 如果删除的是头节点 返回头节点的后面 if(fast == nullptr) return head->next; while(fast->next!=nullptr){
fast = fast->next; slow = slow->next; } slow->next = slow->next->next; return head; }};void print_node(ListNode* head){
while(head!=nullptr){
cout<
val<
next; }}int main(){
ListNode node1(5); ListNode node2(4,&node1); ListNode node3(3,&node2); ListNode node4(2,&node3); ListNode node5(1,&node4); Solution s; ListNode* ans = s.removeNthFromEnd(&node5, 1); print_node(ans); return 0;}

今天也是爱zz的一天哦!

转载地址:http://ymdsn.baihongyu.com/

你可能感兴趣的文章
装饰器和门面设计模式介绍
查看>>
创建型模式——克隆模式
查看>>
JVM关闭和Hook钩子
查看>>
线程中断处理
查看>>
消息队列积压问题处理
查看>>
并行流使用注意事项
查看>>
泛型擦除机制及相关问题
查看>>
Jackson日期反序列化时区问题
查看>>
《设计模式》
查看>>
单例设计模式
查看>>
面试题集锦(一)
查看>>
Calendar类方法——编写万年历的两种方式
查看>>
File类的使用——遍历所有文件及子文件以及遍历删除
查看>>
内存流的使用——基本使用
查看>>
RandomAccessFile 类的使用——基本使用
查看>>
Properties实现类——基本使用
查看>>
结构型模式——装饰者设计模式
查看>>
线程的同步——Synchronized和ReentrantLock
查看>>
网络编程基础
查看>>
python实现快速排序
查看>>