首页 > 其他 > 详细

leetcode 19. 删除链表的倒数第 N 个结点

时间:2021-06-13 18:54:47      阅读:19      评论:0      收藏:0      [点我收藏+]

一、题目

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

进阶:你能尝试使用一趟扫描实现吗?
技术分享图片

二、解法

常规思路:先扫描一次,得到链表的长度 \(len\) ,然后扫描得到 \(len-n\) 个节点即可。

如果要想一趟扫描实现,思路是 快慢指针
快指针 \(fast\) 比慢指针 \(slow\)\(n\) 个节点,然后当 \(fast\) 遍历到末尾时,慢指针的位置即为要删除的位置。

小技巧:这种链表删除的题目,通常需要用一个虚拟头结点 \(dummy\) ,是为了避免讨论删除头结点带来的额外代码。

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode() {}
 *     ListNode(int val) { this.val = val; }
 *     ListNode(int val, ListNode next) { this.val = val; this.next = next; }
 * }
 */
class Solution {
    public ListNode removeNthFromEnd(ListNode head, int n) {
        ListNode dummy=new ListNode(0,head);
        ListNode slow=dummy,fast=dummy;
        for(int i=0;i<n;++i){
            fast=fast.next;
        }

        while(fast.next!=null){
            fast=fast.next;
            slow=slow.next;
        }

        slow.next=slow.next.next;
        return dummy.next;  
    }
}

leetcode 19. 删除链表的倒数第 N 个结点

原文:https://www.cnblogs.com/livingsu/p/14880446.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!