• 2.10

    • 难点 1:因为处理删除头结点的情况,所以需要哨兵节点
    • while 里是 fast。next
  • 1.24

    • 这里之所以需要哨兵节点是因为如何删除的是第一个节点,那完大蛋
  • 1.20

    • 第二遍做的时候,以为是倍数快慢指针走,后来知道是现在 n 步,再一起走到null 的前一个的尾节点
    • 需要哨兵节点
  • 11.9

    • 需要加哨兵节点,不然当只有一个节点时不好处理
    • fast先走n步,然后同时走,走到尾节点(null的前一个),slow就是n的前一个,可用n为1举例下图

class Solution {
    public ListNode removeNthFromEnd(ListNode head, int n) {
        ListNode dummy = new ListNode(0);
        dummy.next= head;
        ListNode slow = dummy;
        ListNode fast = dummy;
        for(int i=0;i<n;i++){// 因为加了一个节点,但不用n+1因为这里加不加头节点没关系
            fast = fast.next;
        }
        while(fast.next!=null){//这里和上面走n步一起达成目标
            fast = fast.next;
            slow = slow.next;
        }
        slow.next = slow.next.next;
        return dummy.next;
    }
}