题解 | #删除链表的倒数第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;

    }
}

全部评论

相关推荐

11-28 17:48
中山大学 C++
点赞 评论 收藏
分享
11-01 08:48
门头沟学院 C++
伤心的候选人在吵架:佬你不要的,能不能拿户口本证明过户给我。。球球了
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务