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

删除倒数第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;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值