【LeetCode】删除链表的倒数第N个节点【双指针法】

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

示例:

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

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

说明:

给定的 n 保证是有效的。

进阶:

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

来源:力扣(LeetCode)
链接:
https://leetcode-cn.com/problems/remove-nth-node-from-end-of-list

分析:

双指针法:

两个指针k1和k2都指向头结点,k1先走n步,然后k1和k2一起走,当k1走到尾部的时候,k2指向的结点就是链表的倒数第n个结点

复制代码
/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode(int x) : val(x), next(NULL) {}
 * };
 */
class Solution {
public:
ListNode* removeNthFromEnd(ListNode* head, int k)
{
    if(head==NULL)
        return NULL;
    if(head->next==NULL&&k==1)
        return NULL;
    ListNode *p1=head,*p2=head,*pre=head;
    int c=k-1;
    while(c--)
    {
        p2=p2->next;
    }
    while(p2->next!=NULL)
    {
        pre=p1;
        p1=p1->next;
        p2=p2->next;
    }
    if(p1==head)
        return p1->next;
    else
    {
        pre->next=p1->next;
    }
    return head;
}
};
复制代码
posted @   西*风  阅读(227)  评论(0编辑  收藏  举报
编辑推荐:
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
历史上的今天:
2018-08-12 HDU 3635 Dragon Balls(超级经典的带权并查集!!!新手入门)
2018-08-12 HDU 3938 Portal (离线并查集,此题思路很强!!!,得到所谓的距离很巧妙)
2018-08-12 POJ 1703 Find them, Catch them(确定元素归属集合的并查集)
点击右上角即可分享
微信分享提示