源题目

https://leetcode-cn.com/problems/remove-nth-node-from-end-of-list/

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

难度中等1514
双指针--LeetCode 19. 删除链表的倒数第 N 个结点 - 图1
给你一个链表,删除链表的倒数第 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]

提示:

  • 链表中结点的数目为 sz
  • 1 <= sz <= 30
  • 0 <= Node.val <= 100
  • 1 <= n <= sz
  1. /**
  2. * Definition for a singly-linked list.
  3. * class ListNode {
  4. * public $val = 0;
  5. * public $next = null;
  6. * function __construct($val = 0, $next = null) {
  7. * $this->val = $val;
  8. * $this->next = $next;
  9. * }
  10. * }
  11. */
  12. class Solution {
  13. /**
  14. * @param ListNode $head
  15. * @param Integer $n
  16. * @return ListNode
  17. */
  18. function removeNthFromEnd($head, $n) {
  19. if($head == null){
  20. return $head;
  21. }
  22. $newList = new ListNode();
  23. $newList->next = $head;
  24. $fast = $slow = $newList;
  25. for($i=0; $i<$n+1; $i++){
  26. $fast = $fast->next;
  27. }
  28. while($fast != null){
  29. $fast = $fast->next;
  30. $slow = $slow->next;
  31. }
  32. $slow->next = $slow->next->next;
  33. return $newList->next;
  34. }
  35. }