19. 删除链表的倒数第N个节点

151 阅读1分钟

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

示例:

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

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

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode(int x) { val = x; }
 * }
 */
class Solution {
    public ListNode removeNthFromEnd(ListNode head, int n) {
    //考虑倒数第n个是第一个结点,为了能够有返回,再加一个头。
        ListNode demp = new ListNode(0);
        demp.next = head;
        ListNode p1 = demp;
        ListNode p2 = demp;
        //fast指针走n+1步
        for(int i=1;i<=n+1;i++){
            p1=p1.next;
        }
        //fast指针走到null结点
        while(p1!=null){
            p2=p2.next;
            p1=p1.next;
        }
        
        p2.next=p2.next.next;
        return demp.next;
    }
}