首页 > 其他分享 >删除链表的倒数第n个节点

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

时间:2023-06-17 17:22:37浏览次数:53  
标签:head ListNode next 链表 节点 倒数第 first

  • 描述
给定一个链表,删除链表的倒数第 n 个节点并返回链表的头指针
例如, 给出的链表为: 1→2→3→4→5,n=2.
删除了链表的倒数第 n 个节点之后,链表变为1→2→3→5.   数据范围: 链表长度 0≤n≤1000,链表中任意节点的值满足 0≤val≤100 要求:空间复杂度 O(1),时间复杂度 O(n)
备注: 题目保证n 一定是有效的  
  • 示例
输入:{1,2},2 输出:{2}   
  • 算法思想
先将链表逆置,采用头插法的思想逆置链表,然后删除正数第n个节点,最后再将链表逆置并返回   代码 
 1 #include <cstdlib>
 2 class Solution {
 3 public:
 4     /**
 5      * 
 6      * @param head ListNode类 
 7      * @param n int整型 
 8      * @return ListNode类
 9      */
10      //逆置链表(头插法)
11      ListNode* reverse(ListNode *head){
12         ListNode *first=(ListNode*) malloc(sizeof(ListNode));
13         first->val=0;
14         first->next=nullptr;
15         while(head){
16             ListNode *temp=head->next;
17             head->next=first->next;
18             first->next=head;
19             head=temp;
20         }
21         return first;
22      }
23      //删除倒数第n个节点
24     ListNode* removeNthFromEnd(ListNode* head, int n) {
25         ListNode *L1=reverse(head);
26         ListNode *p=L1;
27         for(int i=1;i<n;i++){
28             p=p->next;
29         }
30         ListNode *q=p->next;
31         p->next=q->next;
32         free(q);
33         ListNode *L2=reverse(L1->next);
34         return L2->next;
35     }
36 };

 

      

标签:head,ListNode,next,链表,节点,倒数第,first
From: https://www.cnblogs.com/yueshengd/p/17487743.html

相关文章

  • 【基础算法】单链表的OJ练习(5) # 环形链表 # 环形链表II # 对环形链表II的解法给出证
    前言本章的OJ练习相对于OJ练习(4)较为简单。不过,本章的OJ最重要的是要我们证明为何可以这么做。这也是==面试==中常出现的。对于OJ练习(4):==->==传送门==<-==,分割链表以一种类似于归并的思想解得,回文链表以一种巧妙复用前面OJ题的思想解得。啰嗦一下:对于本章,最重要的是......
  • 找出星型图的中心节点
    有一个无向的星型图,由n个编号从1到n的节点组成。星型图有一个中心节点,并且恰有n-1条边将中心节点与其他每个节点连接起来。给你一个二维整数数组edges,其中 edges[i]=[ui,vi]表示在节点ui和vi之间存在一条边。请你找出并返回 edges所表示星型图的中心......
  • Jenkins-Slave节点 电脑A控制电脑B运行Python脚本
    电脑A装了Jenkins的服务器,电脑B作为Jenkins的节点电脑(Slave)Jenkins服务的配置1、ManageJenkins>ConfigureSystem 找到JenkinsURL,确保不是127.0.0.1或者localhost就可以了。 2、ManageJenkins>ConfigureGlobalSecurity找到代理,设置端口或者选择随机选取,再把代......
  • tr069 节点模板定义c语言
    #include<stdio.h>/*Signed*/typedefsignedcharint8_t;typedefshortintint16_t;typedefintint32_t;/*Unsigned.*/typedefunsignedcharuint8_t;typedefunsignedshortintuint16_t;typedefunsignedint......
  • SQL SERVER 根据子节点查询所有父节点、根据父节点获取所有子节点
    一、根据表单类型查询其所有的上级表单类型:1、每次按照一个子节点的值进行查询:withpartentsas(select*fromJCBDFLwhereBDFLDM='14'UNIONALL(SELECTa.*fromJCBDFLasainnerjoinpartentsasbona.BDFLDM=b.SJDM))SELECTBDFLDM,BDFLMC,SJDMFROMparten......
  • 反转链表
    反转链表题目:反转一个单链表。示例:输入:1->2->3->4->5->NULL输出:5->4->3->2->1->NULL解题思路:在纸上画一画,找到规律就可以写出来/***Definitionforsingly-linkedlist.*publicclassListNode{*intval;*ListNodenext;*ListNode(intx)......
  • 环形链表
    环形链表题目:给定一个链表,判断链表中是否有环。如果链表中有某个节点,可以通过连续跟踪next指针再次到达,则链表中存在环。为了表示给定链表中的环,我们使用整数pos来表示链表尾连接到链表中的位置(索引从0开始)。如果pos是-1,则在该链表中没有环。注意:pos不作为参数进行传......
  • 删除链表的倒数第N个节点
    删除链表的倒数第N个节点给定一个链表,删除链表的倒数第n个节点,并且返回链表的头结点。示例:给定一个链表:1->2->3->4->5,和n=2.当删除了倒数第二个节点后,链表变为1->2->3->5.说明:给定的n保证是有效的。解题思路:用两个指针一前一后遍历链表,两者相差n+1个节点,当前......
  • 环形链表 II
    环形链表II题目:给定一个链表,返回链表开始入环的第一个节点。如果链表无环,则返回null。为了表示给定链表中的环,我们使用整数pos来表示链表尾连接到链表中的位置(索引从0开始)。如果pos是-1,则在该链表中没有环。注意,pos仅仅是用于标识环的情况,并不会作为参数传递到函数中......
  • 相交链表
    相交链表题目:编写一个程序,找到两个单链表相交的起始节点。如下面的两个链表:在节点c1开始相交。示例1:输入:intersectVal=8,listA=[4,1,8,4,5],listB=[5,0,1,8,4,5],skipA=2,skipB=3输出:Referenceofthenodewithvalue=8输入解释:相交节点的值为8(注意,如果......