Leetcode19. Remove Nth Node From End of List

本文详细介绍了LeetCode上的第19题“从链表末尾删除第N个节点”的解决方案。通过两次遍历链表的方法,首先计算出链表的长度,再定位到待删除节点的前一个节点,并完成删除操作。

Leetcode19. Remove Nth Node From End of List

原题地址

题目描述

Given a linked list, remove the nth node from the end of list and return its head.

思路

要删除倒数第n个节点,要先找到该节点的前一个节点。可以先遍历链表得出链表中节点个数count,则要删除的节点的前一个节点位于顺数第count-n-1位置处,然后后面进行简单的删除操作即可。

代码实现

  /**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode(int x) : val(x), next(NULL) {}
 * };
 */
class Solution {
public:
    ListNode* removeNthFromEnd(ListNode* head, int n) {
        if (head==NULL || n<=0){
            return NULL;
        } 
       int count=0;
       ListNode *p1;
       p1=head;
       while(p1){
           count++;
           p1=p1->next;
       }
       ListNode *p2;
       p2=head;
       if(count==n){
           head=p2->next;
           return head;
       }
       int move=count-n-1;
       while(move){
           p2=p2->next;
           move--;
       }
       p2->next=p2->next->next;
       return head;
    }
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值