leetcode-19 删除链表中倒数第N个节点;

149 阅读1分钟

思路:

  1. 使用dummy大法连接原始链表head;
  2. 使用快慢指针 fast slow
  3. for循环 ,使fast指针向next方向移动 (n+1) 步;
  4. fast 指针和 slow 指针一起向next方向移动,直到fast指针为空结束,目的是为了通过slow指针找到要删除的节点delNode;
  5. 删除delNode 节点;
  6. 返回dummy的下一个节点

手撸代码

   public ListNode removeNthFromEnd(ListNode head,int n){
    // dummy 大法:两步走:
    // 1: 新建dummy 节点
    // 2: dummy的下一个节点next 节点指向参数head;
    ListNode dummy =new ListNode(-1);
    dummy.next = head;
    
    
    // 快慢指针
    ListNode slow = dummy;
    ListNode fast = dummy;
    
    // 快指针,向前走n+1步
    for(int i = 0;i<=n;i++){
      fast = fast.next;
    }
    
    // 快慢指针一直“下一步”,直到fast 为空停止
    while(fast!=null){
        fast = fast.next;
        slow = slow.next;
      } 
      // 此时slow指针的下一个节点,就是要删除的元素
      ListNode delNode  = slow.next;
      // 做链表的跳跃的连接操作,你我都知道,要是双链表的话,还有一个pre 操作呢,,🤣
      slow.next = delNode.next;
      delNode.next = null;
      
      // 返回dummy 的下一个节点
      return dummy.next;
   
   }