链表之leetcode19:删除链表的倒数第N个结点
删除链表的倒数第N个结点
题目描述
给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。
提示:
- 链表中的结点的数目为sz
- 1 <= sz <= 30
- 0 <= Node.val <= 100
- 1 <= n <= sz
代码
/*** 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) {// 使用一个虚拟头结点进行统一处理ListNode dummyHead = new ListNode();dummyHead.next = head;// 可以使用两个指针,先让快指针往后移动n个位置,然后慢指针和快指针同时移动,直到快指针指向null,此时慢指针指向的是倒数第n个元素// 由于要删除元素,所以我们需要指向要删除元素的前一个元素// 所以可以将快指针再往后移动一个元素,也就是总共移动n+1个位置ListNode slow = dummyHead;ListNode quick = dummyHead;n++;while(n-- != 0) {quick = quick.next;}// 快慢指针同时移动while(quick != null) {slow = slow.next;quick = quick.next;}slow.next = slow.next.next;return dummyHead.next;}
}