LeetCode 19.删除链表的倒数第N个节点

int getlenth(ListNode* head){
        int i = 0;
        while(head){
            i++;
            head = head->next;
        }
        return i;
    }
    

 

  • getlenth(ListNode* head):计算链表的长度。

    • 它接受一个链表的头节点 head 作为参数。
    • 使用一个循环遍历链表,直到 head 为 NULL(表示链表的末尾)。
    • 在循环中,i 递增以记录遍历过的节点数。
    • 返回 i,即链表的长度。

 

 

ListNode* removeNthFromEnd(ListNode* head, int n) {
        if(head->next == NULL)
        return NULL;
        ListNode* p = head,*q;
        if(n == getlenth(head))
        {
            return head->next;
        }
        for(int i = 0;i < getlenth(head) - n - 1;i++){
            p = p->next;
        }
        q = p->next;
        p->next = q->next;
        delete q;
        return head;
    }
  • removeNthFromEnd(ListNode* head, int n):从链表的末尾移除第 n 个节点。

    • 它接受链表的头节点 head 和一个整数 n 作为参数。
    • 如果链表中只有一个节点(即 head->next == NULL),则直接返回 NULL,因为不能从单个节点的链表中移除任何节点。
    • 使用两个指针 p 和 qp 用于遍历链表,q 用于指向要删除的节点的前一个节点。
    • 如果 n 等于链表的长度(即要删除的是链表的第一个节点),则直接返回 head->next,即删除头节点后的链表。
    • 使用一个循环遍历链表,直到到达要删除节点的前一个位置。循环的终止条件是 p 指向链表的倒数第 n+1 个节点。
    • 在循环结束后,q 指向要删除节点的前一个节点,p 指向要删除的节点。
    • 将 p->next 设置为 q->next,即跳过 q 后面的节点(即要删除的节点)。
    • 使用 delete 释放要删除节点的内存。
    • 返回链表的头节点 head
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值