算法通关村第一关-白银挑战-链表

删除倒数第n个节点

      给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。

算法通关村第一关-白银挑战-链表_第1张图片

代码如下:

        创建虚拟头节点和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;
}

你可能感兴趣的:(算法尽头,算法,链表,数据结构)