leetcode题目19——删除倒数第N个节点

这篇博客介绍了如何使用双指针法在链表中删除倒数第n个节点。首先创建一个虚拟头节点,然后让快指针前进n步,之后快慢指针同时移动,直至快指针到达链表末尾。此时,慢指针正好位于倒数第n个节点的前一个位置,将其next指向后面节点即可完成删除操作。这种方法在处理链表节点的精确定位问题时非常有效。

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

问题描述:

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


思路分析:

提示:双指针
1.先让快指针跑n个节点
2.判断是否跑完(为空)
3.若非;快慢一起跑,直到快为空
4.此时,慢指针指着倒数第n个节点的前一个节点
5.快慢初始指针的位置要,正确

class Solution {   
	public ListNode removeNthFromEnd(ListNode head, int n) { 
 		ListNode dummy = new ListNode(0, head);       
 		 ListNode first = head;       
  		 ListNode second = dummy;       
    	for (int i = 0; i < n; ++i) {          
     	 	first = first.next;        }       
      	 	while (first != null) {           
       		 first = first.next;            
       		 second = second.next;        }       
         	second.next = second.next.next;       
         	 ListNode ans = dummy.next;       
           	return ans;    }
           	}

结果分析:

删掉倒数第n个节点,即让下一位代替倒数第n位置
当需要精确到某一个位置的时候,第一要想起双指针,第二数字必须精确


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值