虚拟头结点
/**
* 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 dumhead=new ListNode(-1,head);
ListNode temp=head;
int size=1;
//统计结点总数
while(temp.next!=null)
{
temp=temp.next;
size++;
}
temp=head;
//只有一个结点,删除后为空
if(size==1)
{
head=null;
return head;
}
//删除头结点,用虚拟结点删除
if(size==n)
{
dumhead.next=dumhead.next.next;
return dumhead.next;
}
//正常情况下
//结束循环时,temp指向删除结点的前一个结点
while(size-1!=n)
{
temp=temp.next;
size--;
}
//删除操作
temp.next=temp.next.next;
return head;
}
}