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

描述
给定一个链表,删除链表的倒数第 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

输入:{1,2},2
返回值:{2}

解法分析:

方式一:

1、先让curr链表走n步
2、此时,prev指针从头开始走,curr走到头既是要删除节点的前一个节点位置
3、删除delNode节点

方法二:

1、先统计总共的节点个数length
2、新增一个指针从头开始走,走到length-n,找到待删除节点的位置
3、删除节点
我这里实现的是按照方法一实现

代码实现
public ListNode removeNthFromEnd (ListNode head, int n) {
        ListNode dummy = new ListNode(-1);
        dummy.next = head;
        ListNode curr = head;
        ListNode prev = dummy;
        //先让curr链表走n步
        while(n>0){
            n--;
            curr = curr.next;
        }
        //prev指针从头开始走,curr走到头既是要删除节点的前一个节点位置
        while(curr != null){
            curr = curr.next;
            prev = prev.next;
        }
        //删除delNode节点
        ListNode delNode = prev.next;
        prev.next = delNode.next;
        delNode.next = null;
        
        return dummy.next;
    }
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容