• leecode刷题(21)-- 删除链表的倒数第N个节点


    leecode刷题(21)-- 删除链表的倒数第N个节点

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

    描述:

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

    示例:

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

    说明:

    给定的 n 保证是有效的。


    思路:

    这道题我们可以采用双指针法来解答。定义两个指针 left 和 right, 都让其指向链表的头节点。先让 right 指针向后移动 n 步,然后 left 指针和 right 一起向后移动,当 right 的 next 指针为 NULL 时,left 指针即指向了要删除节点的前一个节点,接着让 left 的 next 指针指向要删除节点的下一个节点即可。这里我们需要注意的是,如果要删除的节点刚好是头节点,那么 right 指针向后移动结束时就会为 NULL,所以加一个判断其是否为 NULL 的条件,若为 NULL 则返回头节点的 next 指针。

    代码如下:

    /**
     * Definition for singly-linked list.
     * public class ListNode {
     *     int val;
     *     ListNode next;
     *     ListNode(int x) { val = x; }
     * }
     */
    class Solution {
        public ListNode removeNthFromEnd(ListNode head, int n) {
            ListNode left = head;
            ListNode right = head;
            
            for(int i = 0; i < n; i++) {
                right = right.next;
            }
            
            if(right == null) {
                return head.next;
            }
            
            while(right.next != null) {
                left = left.next;
                right = right.next;
            }
            left.next = left.next.next;
            return head;
            
        }
    }
    
  • 相关阅读:
    jar 反编译工具
    SpringBoot 中注解方式的拦截过滤
    jetty 启动项目在pom.xml 的配置
    java Exception 处理汇总
    mysql-覆盖索引
    程序员为何如此累
    启动centos 不带桌面
    Linux 和 Vim 常用命令整理
    How to Use tomcat on Linux
    Mac Book 问题汇集
  • 原文地址:https://www.cnblogs.com/weixuqin/p/10435967.html
Copyright © 2020-2023  润新知