Leetcode刷题100天—19. 删除链表的倒数第 N 个结点(双指针)—day21

Posted 神的孩子都在歌唱

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Leetcode刷题100天—19. 删除链表的倒数第 N 个结点(双指针)—day21相关的知识,希望对你有一定的参考价值。

前言:

作者:神的孩子在歌唱

大家好,我叫运智

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

难度中等1529收藏分享切换为英文接收动态反馈

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

**进阶:**你能尝试使用一趟扫描实现吗?

示例 1:

输入:head = [1,2,3,4,5], n = 2
输出:[1,2,3,5]

示例 2:

输入:head = [1], n = 1
输出:[]

示例 3:

输入:head = [1,2], n = 1
输出:[1]

提示:

  • 链表中结点的数目为 sz
  • 1 <= sz <= 30
  • 0 <= Node.val <= 100
  • 1 <= n <= sz
package 双指针;

public class _19_删除链表的倒数第N个结点 {
//	通过双指针,首先遍历到第n个数,然后在创建另一个指针从这第n数开始遍历就能找到他的倒数
    public ListNode removeNthFromEnd(ListNode head, int n) {
    	// 解析案列:1-2-3-4-5  n=2
//    		创建一个新链表
    	ListNode ret=new ListNode(0,null);
//    	创建新指针指向head和ret
    	ListNode first=head;//指向1
    	ret.next=head;//null-1-2-3-4-5 
    	ListNode second=ret;//指向null
    	
//    	先循环到第n个数
    	for(int i=0;i<n;i++) {
    		first=first.next;
    	}
//    	first遍历完后指向3
    	
//    	如果first为null循环结束
    	while(first!=null) {
//    		遍历ret链表从first开始
    		second=second.next;
    		first=first.next;   		
    	}
//    	循环完后second指向3,这里遍历了三次
    	second.next=second.next.next;//最后在用3指向5
    	return ret.next;
    }
}

本人csdn博客:https://blog.csdn.net/weixin_46654114

转载说明:跟我说明,务必注明来源,附带本人博客连接。

以上是关于Leetcode刷题100天—19. 删除链表的倒数第 N 个结点(双指针)—day21的主要内容,如果未能解决你的问题,请参考以下文章

Leetcode刷题100天—83. 删除排序链表中的重复元素(链表)—day03

Leetcode刷题100天—83. 删除排序链表中的重复元素(链表)—day03

Leetcode刷题100天—203. 移除链表元素(链表)—day02

Leetcode刷题100天—203. 移除链表元素(链表)—day02

Leetcode刷题100天—876.链表的中间结点(链表)—day04

Leetcode刷题100天—876.链表的中间结点(链表)—day04