leetcode 19.Remove Nth Node From End of List

本文介绍了一种使用双指针技术解决链表中删除倒数第N个节点的问题的方法。通过两个指针并利用给定的N值调整它们之间的相对位置,可以有效地找到目标节点并进行删除操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这道链表的题可以给一下提升

这个题目用双指针来解,就可以忽略链表的长度信息,绝对位置信息。通过两个链表的距离来操作。

距离通过给定的n来移动。

1.num1,num2,都指向头部。

2.通过for,移动num2到与num1距离n的位置

for(int i=0;i<n;i++){

num2=num2->next;

}

3.把num2移到最后,num2移动一次,num1移动一次,此时2到最后,1到倒数第n;

即可进行操作。

ps:这里默认的是第三步的num2没到最后,其实如果在3时,num2到了最后,意味着移除的就是头,操作 return head->next;

首先 使用ListNode *num1=head;

是有一个指针指向链表头部,而不是复制了一个链表,对这个指针进行操作就是对链表的操作。

/**                                                            战胜 21%
 * 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) {
        // double points 
        if(head==NULL||head->next==NULL){ 
            return NULL;
        }
        
        
        
        ListNode * newHead=head;
        ListNode *num1=head;
        ListNode *num2=head;
        
        for(int i=0;i<n;i++){
            num2=num2->next;
            if(num2==NULL) return head->next;
            
        }
        
        while(num2->next!=NULL){
            num1=num1->next;
            num2=num2->next;
            
        }
        num1->next=num1->next->next;
        return head;
    }
};


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值