思路:
要想一次循環,一趟遍歷完,那肯定是要想到雙指針了,但是雙指針怎么做呢?題目給出刪除倒數第N個,我們如果能找到倒數第N個節點的前一個節點就行了,倒數第N個肯定是倒著數,那我們就讓兩個指針中間就差N個單位,當快指針走到鏈表最后一個的下一個null節點時,這時候慢指針就是倒數第N個節點的前一個節點了,因為快慢指針始終相差N個節點。
?代碼:
/*** Definition for singly-linked list.* public class ListNode {* int val;* ListNode next;* ListNode() {}* ListNode(int val) { this.val = val; }* ListNode(int val, ListNode next) { this.val = val; this.next = next; }* }*/
class Solution {public ListNode removeNthFromEnd(ListNode head, int n) {ListNode hair = new ListNode(-1,head);ListNode pre = hair, cur = head;for(int i=0;i<n;i++){cur = cur.next;}while(cur!=null){pre = pre.next;cur = cur.next;}pre.next = pre.next.next;return hair.next;}
}