题目
思路总结:思路可借鉴上面,只是多加一个pre指针用于记录倒数第n个节点的前一个节点,即下面代码slow指针的前一个节点
代码
import java.util.*;
public class Solution {
public ListNode removeNthFromEnd(ListNode head, int n) {
//双指针:1、找到倒数第n个结点 2、执行删除
if(head == null){
return head;
}
ListNode newHead = new ListNode(-1);//头结点
newHead.next = head;
ListNode pre = null; //记录slow的前驱结点
ListNode slow = newHead;
ListNode fast = newHead;
//fast先走n次
for(int i = 0 ; i < n; i++){
fast = fast.next;
}
//寻找倒数第n个结点,执行完循环,slow就指向倒数第n个结点
while(fast != null){
pre = slow;
slow = slow.next;
fast = fast.next;
}
//执行删除
pre.next = slow.next;
return newHead.next;
}
}