美文网首页
删除链表的倒数第n个节点

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

作者: 刘年年 | 来源:发表于2022-07-23 12:24 被阅读0次

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

    相关文章

      网友评论

          本文标题:删除链表的倒数第n个节点

          本文链接:https://www.haomeiwen.com/subject/xbxyirtx.html