• LeetCode19----删除链表的倒数第N个节点


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

    示例:

    给定一个链表: 1->2->3->4->5, 和 n = 2.
    
    当删除了倒数第二个节点后,链表变为 1->2->3->5.
    

    说明:

    给定的 n 保证是有效的。

    进阶:

    你能尝试使用一趟扫描实现吗?

          因为链表的节点只有next指针,并且我们的题目要求只能扫描一次就完成删除,所以我们不能简单的创建一个数组来解决问题,所以我们可以这样来:

        (1)删除倒数第N个节点,我们让一个快指针指向正向第N个节点

        (2)定义一个慢指针,慢指针指向头节点

        (3)每个指针循环指向下一个节点,当快指针指向最后一个节点时,此时的慢指针指向的就是我们要删除的节点

    代码如下:

    public class LeetCode19 {
    	public static class ListNode {
    		int val;
    		ListNode next;
    
    		ListNode(int x) {
    			val = x;
    		}
    	}
    
    	public ListNode removeNthFromEnd(ListNode head, int n) {
    		if (head == null) {
    			return null;
    		}
    		int k = 0;
    		ListNode low = head;
    		ListNode fast = head;
    		while (k < n - 1) {
    			fast = fast.next;
    			k++;
    		}
    		ListNode lastLow = null;
    		while (true) {
    			if (fast.next != null) {
    				fast = fast.next;
    				lastLow = low;
    				low = low.next;
    			} else {
    				if (lastLow == null) {
    					return low.next;
    				} else {
    					lastLow.next = low.next;
    					low.next = null;
    					return head;
    				}
    			}
    		}
    	}
    }
    

      

  • 相关阅读:
    23Flutter FloatingActionButton实现类似闲鱼App底部导航凸起按钮:
    Emgu.CV 播放视频-本地文件/RTSP流
    SDL 截图、录像、录像播放
    直接操作 SDL_Overlay YUV叠加上的像素
    SDL 显示解码后的yuv12数据
    SDL绑定播放窗口 及 视频窗口缩放
    SDL鼠标事件
    SDL文字和图形
    SDL第一个程序:加载一张图片
    SDL简介(网络汇总)
  • 原文地址:https://www.cnblogs.com/Booker808-java/p/9092494.html
Copyright © 2020-2023  润新知