题解 | #删除链表的倒数第n个节点#

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

https://www.nowcoder.com/practice/f95dcdafbde44b22a6d741baf71653f6

import java.util.*;

/*
 * public class ListNode {
 *   int val;
 *   ListNode next = null;
 * }
 */

public class Solution {
    /**
     * 
     * @param head ListNode类 
     * @param n int整型 
     * @return ListNode类
     */
    public ListNode removeNthFromEnd (ListNode head, int n) {

        // 双指针,第一个指针放在1,第二个指针放在k
        // 再用preNode参数记录slowNode前的数
        ListNode preNode = null;
        ListNode slowNode = head;
        ListNode fastNode = head;

        // 将fastNode放在合适的位置
        for(int i=0;i<n-1;i++){
            fastNode = fastNode.next;
        }

        // 同步移动(但可能这个方法不会执行,当删除第一个点时,这时preNode就是null会导致错误)
        while(fastNode.next != null){
            // 更新preNode
            preNode = slowNode;
            slowNode = slowNode.next;
            fastNode = fastNode.next;
        }

        // 所以这里需要判断preNode是否为空,若为空,说明删除的第一个点,则返回第二个点
        if(preNode == null){
            return head.next;
        }

        // 这里是删除中间点的操作
        preNode.next = preNode.next.next;

        // 最后返回头部即可
        return head;

    }
}

全部评论

相关推荐

待现的未见之事:起码第一句要把自己的优势说出来吧。比如什么xx本27届学生,随时到岗....
点赞 评论 收藏
分享
04-13 18:10
门头沟学院 Java
想熬夜的小飞象在秋招:被腾讯挂了后爸妈以为我失联了
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务