删除链表的倒数第 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,删除的节点就是第一个,那返回头结点的下一个节点即可,也可以将头结点释放,再返回头结点的下一个节点。

posted @ 2020-08-29 10:46  雨下_整夜  阅读(273)  评论(0编辑  收藏  举报