码迷,mamicode.com
首页 > 其他好文 > 详细

[LeetCode] 19. 删除链表的倒数第N个节点 ☆☆☆

时间:2019-12-19 21:28:23      阅读:75      评论:0      收藏:0      [点我收藏+]

标签:实现   remove   删除链表   rem   tno   链表   fas   leetcode   count   

描述

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

示例:

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

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

给定的 n 保证是有效的。

进阶:

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

解析

用三指针,fast比slow快n个位置,slowPre是slow的pre节点。

代码

public static ListNode removeNthFromEnd(ListNode head, int n) {
        if (null == head || n <= 0) {
            return head;
        }
        ListNode slowPre = head;//比slow节点慢1个位置
        ListNode slow = head;//比fast节点慢n个位置
        ListNode fast = head;
        int slowCount = 0;
        while (null != fast) {
            if (n > 0) {
                fast = fast.next;
                n--;
                if (n == 0 && null == fast) {//当倒数第n个节点,刚好是首节点,直接返回head.next
                    return head.next;
                }
            } else {
                fast = fast.next;
                slow = slow.next;
                if (slowCount == 1) {
                    slowPre = slowPre.next;
                } else {
                    slowCount++;
                }
            }
        }
        slowPre.next = slow.next;
        return head;
    }

 

[LeetCode] 19. 删除链表的倒数第N个节点 ☆☆☆

标签:实现   remove   删除链表   rem   tno   链表   fas   leetcode   count   

原文地址:https://www.cnblogs.com/fanguangdexiaoyuer/p/12069856.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!