21.03.08 LeetCode19. 删除链表的倒数第 N 个结点

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

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

示例 1:

 

 

 

输入:head = [1,2,3,4,5], n = 2
输出:[1,2,3,5]
示例 2:

输入:head = [1], n = 1
输出:[]
示例 3:

输入:head = [1,2], n = 1
输出:[1]

/**
 * 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) {
        if(head.next == null)
            return null;
        //取first指针和second指针,first指针先走n步,与second间隔n个节点
        ListNode first = head;
        ListNode N = new ListNode(-1,head);//这里有个小细节,为head建立一个头结点,让second指针从head前一位置出发
        ListNode second = N;
     //因为如果second从head开始走,当while终止时会走到我们要删除的那个节点,不方便删除
     //因此,在走相同步数的前提下,让second提前一个位置出发,则终止时会走到要删除的节点的前一个,方便后续直接删除
for(int i = 0;i<n;i++) first = first.next;
while(first!=null) { second = second.next; first = first.next; } second.next =second.next.next; return N.next; } }

 

posted @ 2021-03-08 22:12  γGama  阅读(42)  评论(0编辑  收藏  举报