链表专项练习题四 | 删除链表倒数第n个结点


问题描述

给定一个链表,随机删除链表中倒数第n个结点,并返回链表的头结点。
链表中的结点个数大于等于n
示例:
给出链表 1->2->3->4->5->null 和 n = 2
删除倒数第2个结点之后,最终得到链表 1->2->3->5->null
要求:
O(n)时间复杂度,一次遍历实现。

题目分析

既然要删除链表的倒数第n个结点,那么就需要先找出链表的倒数第n+1个结点,然后修改这个结点的指向为next->next。
题目要求一次遍历实现,我们可以使用“双指针法”,设置两个指针p1和p2;p1先出发,走到第n+1个结点时,p2再出发。这样,当p2走到链表的尾结点时,p1指向的正好是倒数第n+1个结点。

实现代码

NodeList removeNodeFromEnd( NodeList Head , int n)
{
    NodeList preNode = Head;
    NodeList curNode = Head;
    for(int i=0; i<n; i++){
        curNode = curNode->next;
    }
    if(curNode == null){
        return preNode->next;
    }
    while(curNode!=NULL){
        curNode = curNode->next;
        preNode = preNode->next;
    }
    preNode->next = preNode->next->next;
    return Head;
}

参考链接

LeetCode - 删除链表的倒数第N个节点
删除链表中倒数第n个节点

本文发表于2018年11月14日 21:24
阅读 3235 讨论 0 喜欢 2

抢先体验

扫码体验
趣味小程序
文字表情生成器

闪念胶囊

你要过得好哇,这样我才能恨你啊,你要是过得不好,我都不知道该恨你还是拥抱你啊。

直抵黄龙府,与诸君痛饮尔。

那时陪伴我的人啊,你们如今在何方。

不出意外的话,我们再也不会见了,祝你前程似锦。

这世界真好,吃野东西也要留出这条命来看看

快捷链接
网站地图
提交友链
Copyright © 2016 - 2021 Cion.
All Rights Reserved.
京ICP备2021004668号-1