• 删除链表的倒数第 n 个节点


     今天二刷这道题

     1 /**
     2  * Definition for singly-linked list.
     3  * public class ListNode {
     4  *     int val;
     5  *     ListNode next;
     6  *     ListNode(int x) { val = x; }
     7  * }
     8  */
     9 class Solution {
    10     public ListNode removeNthFromEnd(ListNode head, int n) {
    11         ListNode slow = head,fast = head;
    12         while(fast != null){
    13             
    14             if(n < 0){
    15                 slow = slow.next;
    16             }
    17             n--;
    18             fast = fast.next;//先走了n+1步
    19         }
    20         if(n == 0){
    21             return head.next;
    22         }
    23         ListNode t = slow.next;
    24         slow.next = slow.next.next;
    25         t.next = null;
    26         return head;
    27     }
    28 }
    View Code

    使用快慢指针的做法只需要扫描一趟,但是,有一个边界问题要特殊处理,就是当要删除的节点就是第一个时,这里使用了一个计数器n,若n=0,删除的节点就是第一个,那返回头结点的下一个节点即可,也可以将头结点释放,再返回头结点的下一个节点。

  • 相关阅读:
    寒假13
    寒假作业十二
    寒假12
    寒假作业十一
    寒假11
    寒假作业九
    寒假10
    寒假作业九
    寒假9
    寒假作业八
  • 原文地址:https://www.cnblogs.com/yu-xia-zheng-ye/p/13581305.html
Copyright © 2020-2023  润新知