删除链表的倒数第n个节点

Posted yunshengd

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了删除链表的倒数第n个节点相关的知识,希望对你有一定的参考价值。

  • 描述
给定一个链表,删除链表的倒数第 n 个节点并返回链表的头指针
例如,
给出的链表为: 12345,n=2.
删除了链表的倒数第 n 个节点之后,链表变为1235.
 
数据范围: 链表长度 0n1000,链表中任意节点的值满足 0val100
要求:空间复杂度 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 19 删除链表的倒数第 N 个节点

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

LeetCode 第18题 删除链表的倒数第N个节点

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

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

Leetcode练习(Python):链表类:第19题:删除链表的倒数第N个节点:给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点。说明: 给定的 n 保证是有效的。