第一次提交
class Solution {
public ListNode removeNthFromEnd(ListNode head, int n) {
if(head.next==null) return null;//只有一个节点的链表的特殊处理
//关键是遍历到待删节点的前驱节点
ListNode p = new ListNode();
ListNode q = new ListNode();
p=head;q=head;
if(n<1) return null;
//先令q指针领先p指针n个节点,然后两个指针步长为1进行遍历,当q的下一个节点为空指针时,p指针指向待删节点的前驱节点
int i = 0;
while(i
分析:没有考虑到删除第一个节点的特殊处理情况。
第二次提交
class Solution {
public ListNode removeNthFromEnd(ListNode head, int n) {
if(head.next==null) return null;//只有一个节点的链表的特殊处理
//关键是遍历到待删节点的前驱节点
ListNode p = new ListNode();
ListNode q = new ListNode();
p=head;q=head;
//先令q指针领先p指针n个节点,然后两个指针步长为1进行遍历,当q的下一个节点为空指针时,p指针指向待删节点的前驱节点
int i = 0;
while(i
4.官方题解
class Solution {
public ListNode removeNthFromEnd(ListNode head, int n) {
ListNode dummy = new ListNode(0, head);
ListNode first = head;
ListNode second = dummy;
for (int i = 0; i < n; ++i) {
first = first.next;
}
while (first != null) {
first = first.next;
second = second.next;
}
second.next = second.next.next;
ListNode ans = dummy.next;
return ans;
}
}



