题解 | #删除链表的倒数第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) {
        // write code here
        ListNode dummy = new ListNode(-1);
        dummy.next = head;

        ListNode p1 = dummy, p2 = dummy;

        for (int i = 0; i < n; i ++) p2 = p2.next;

        while (p2.next != null) {
            p1 = p1.next;
            p2 = p2.next;
        }

        p1.next = p1.next.next;

        return dummy.next;
    }
}
  1. 第一次遍历求出链表长度。
  2. 第二次遍历删掉指定结点。
  3. 在 `head` 前新增 `dummy` 节点的方式避免删除首结点时出现问题。

全部评论

相关推荐

周述安:这都能聊这么多。别人要是骂我,我就会说你怎么骂人?他要是继续骂我,我就把评论删了。
点赞 评论 收藏
分享
1 收藏 评论
分享
牛客网
牛客企业服务