LeetCode[19]删除链表的倒数第N个节点
思路:
要想一次循环,一趟遍历完,那肯定是要想到双指针了,但是双指针怎么做呢?题目给出删除倒数第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;
}
}