zoukankan      html  css  js  c++  java
  • 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;
    				}
    			}
    		}
    	}
    }
    

      

  • 相关阅读:
    Emoji表情编解码库XXL-EMOJI
    代码生成平台Xxl-Code-Generator
    分布式单点登录框架XXL-SSO
    分布式爬虫框架XXL-CRAWLER
    Java对象和Excel转换工具XXL-EXCEL
    API管理平台XXL-API
    分布式缓存管理平台XXL-CACHE
    不知不觉已经写了多年代码,贴一下12年写的代码,表喷哈
    memcached安装、使用
    MySQL和Redis数据一致性问题
  • 原文地址:https://www.cnblogs.com/Booker808-java/p/9092494.html
Copyright © 2011-2022 走看看