删除倒数第n个节点
给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。
代码如下:
创建虚拟头节点和cur指针是为了防止删除的元素是第一个元素。
public ListNode removeNthFromEnd(ListNode head, int n) {
ListNode dummy = new ListNode(0); //创建一个虚拟头节点
dummy.next=head; //虚拟头结点的指针指向原来链表的头结点
int length = getLength(head); //得到原来链表的长度
ListNode cur = dummy; //创建cur指针指向dummy也就是虚拟头结点
for (int i = 1; i < length - n + 1; ++i) {
cur = cur.next; //遍历链表直到cur指针指向n - 1 那个节点
}
cur.next = cur.next.next; //cur指针指向n + 1 那个节点
ListNode ans = dummy.next; //虚拟头节点的指针赋值给ans
return ans;
}
public int getLength(ListNode head) {
int length = 0; //初始化链表长度为0
while (head != null) {
++length;
head = head.next; //只要头节点不为空,链表长度就加一,头结点的指针也向右移动一位。
}
return length;
}