zoukankan      html  css  js  c++  java
  • 删除链表的倒数第N个节点

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

    示例:

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

    一种方法是先计算链表的长度N,然后定位到第(N-n)个节点,删除节点(N-n+1)也即(倒数第n个节点)

    代码如下:

        public static ListNode removeNthFromEnd(ListNode head, int n) {
    
            // 新建一个节点temp
            // temp.next = head可以保存链表的头结点
            // 也方便处理删除的是第一个节点(倒数第N个)
            ListNode temp = new ListNode(0);
            temp.next = head;
            int N = 0;
            // Get the length of the list
            while (head != null) {
                N++;
                head = head.next;
            }
            N = N-n;
            head = temp;
            // Locate the (N-n)th node
            while (N>0) {
                head = head.next;
                N--;
            }
            head.next = head.next.next;
            return temp.next;
        }

    第二种方法是,使用两个指针,首先将第一个指针置于第二个的后n+1个节点处。再同时移动两个指针,当第一个指向链表末尾时,第二个指针指向第(N-n)个节点。

    以n=2为例,即删除倒数第二个节点

    指针2指向开始处,指针1与指针2相隔为(n+1)

    同时移动指针1与2,当1指向null时,二指向倒数第(n+1)个节点。

    代码如下:

        public static ListNode test(ListNode head, int n) {
            ListNode temp = new ListNode(0);
            temp.next = head;
            ListNode p = temp;
            ListNode q = temp;
            while (n+1>0) {
                q = q.next;
                n--;
            }
            while (q != null) {
                p = p.next;
                q = q.next;
            }
            p.next = p.next.next;
            return temp.next;
        }
    
    
  • 相关阅读:
    elementui组件库eldialog弹出框被遮罩层挡住
    python常规基础操作
    python中的字典排序
    python列表面试题
    python logging日志模块
    python序列之列表
    jmeter中csv连接数据库
    python必会的知识基础
    jmeter tcp 压力测试
    python模块基础知识练习
  • 原文地址:https://www.cnblogs.com/deltadeblog/p/8947307.html
Copyright © 2011-2022 走看看