public class DeleteNthDesc {
public ListNode removeNthFromEnd(ListNode head, int n) {
ListNode dummy = new ListNode(0, head); //定义虚拟头头节点
int length = getLength(head); //获取head链表的大小
ListNode cur = dummy;
//获取被删除节点的上一个节点【因为是删除倒数的节点,又因为是链表,所以我们必须从正面来】
for (int i = 1; i < length - n + 1; ++i) {
cur = cur.next;
}
cur.next = cur.next.next; //删除节点
ListNode ans = dummy.next; //返回删除后的头结点链表
return ans;
}
//获取链表大小
public int getLength(ListNode head) {
int length = 0;
while (head != null) {
++length;
head = head.next;
}
return length;
}
}
class ListNode {
int val;
ListNode next;
ListNode() {
}
ListNode(int val) {
this.val = val;
}
ListNode(int val, ListNode next) {
this.val = val;
this.next = next;
}
}