删除链表的倒数第n个节点
Posted yunshengd
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了删除链表的倒数第n个节点相关的知识,希望对你有一定的参考价值。
- 描述
给定一个链表,删除链表的倒数第 n 个节点并返回链表的头指针
例如,
例如,
给出的链表为: 1→2→3→4→5,n=2.
删除了链表的倒数第 n 个节点之后,链表变为1→2→3→5.
删除了链表的倒数第 n 个节点之后,链表变为1→2→3→5.
数据范围: 链表长度 0≤n≤1000,链表中任意节点的值满足 0≤val≤100
要求:空间复杂度 O(1),时间复杂度 O(n)
备注:
备注:
题目保证n 一定是有效的
- 示例
输入:1,2,2
输出:2
- 算法思想
先将链表逆置,采用头插法的思想逆置链表,然后删除正数第n个节点,最后再将链表逆置并返回
代码
#include <cstdlib> class Solution public: /** * * @param head ListNode类 * @param n int整型 * @return ListNode类 */ //逆置链表(头插法) ListNode* reverse(ListNode *head) ListNode *first=(ListNode*) malloc(sizeof(ListNode)); first->val=0; first->next=nullptr; while(head) ListNode *temp=head->next; head->next=first->next; first->next=head; head=temp; return first; //删除倒数第n个节点 ListNode* removeNthFromEnd(ListNode* head, int n) ListNode *L1=reverse(head); ListNode *p=L1; for(int i=1;i<n;i++) p=p->next; ListNode *q=p->next; p->next=q->next; free(q); ListNode *L2=reverse(L1->next); return L2->next; ;
以上是关于删除链表的倒数第n个节点的主要内容,如果未能解决你的问题,请参考以下文章
Leetcode练习(Python):链表类:第19题:删除链表的倒数第N个节点:给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点。说明: 给定的 n 保证是有效的。