zoukankan      html  css  js  c++  java
  • 19-删除链表的倒数第n个节点(容易造成成环错误)

     假如链表长度为5,有1,2,3,4,5五个元素,删除倒数第2个元素4。5-2=3,也就是指向被删除的元素的上一个元素,正好。

    正确做法:多次循环:

    class Solution {
        public ListNode removeNthFromEnd(ListNode head, int n) {
            ListNode mark=new ListNode(0);//mark值为零,没有指向的节点
            mark.next=head;//专门指向头结点的前一个节点的节点
            int length=0;//链表长度
            ListNode first=head;
            while(first!=null)
            {
                length++;
                first=first.next;
            }
            int shu=length-n;//假如n为2,总共1,2,3,4,5五个数,5-2等于3,也就是指向被删除的数的前一个数
            first=mark;
            while(shu>0)
            {
                shu--;
                first=first.next;
            }
            first.next=first.next.next;//删除元素
            return mark.next;
           
           
        }
    }
    

      错误做法:

    class Solution {//假设输入n==2,总共1,2,3,4,5
        public ListNode removeNthFromEnd(ListNode head, int n) {
            ListNode mark=new ListNode(0);
            mark.next=head;
            int length=0;//链表长度
            while(mark.next!=null)
            {
                length++;
                mark=mark.next;
            }
            mark.next=head;//我想把mark作为指向头元素的前一个元素的标记,但是刚刚遍历获得长度的时候,mark已经指向5,这一步mark.next=head使得链表成环,报错,换个指针进行遍历长度工作就可以
            ListNode mark2=new ListNode(0);
            mark2.next=head;
            int shu=length-n;//倒数第n个节点是第几个节点
            while(shu>0)//寻找倒数n-1个节点
            {
                mark2=mark2.next;
                shu--;
            }
            mark2.next=mark2.next.next;
            return mark.next;
    
        }
    }
    

      

  • 相关阅读:
    在MathType如何让括号随内容自动调整大小的技巧
    对于MathType中公式与文字错位的问题怎么解决
    怎样批量修改MathType公式格式
    你与论文达人只差一个MathType的距离
    公式达人必杀技,你会几招?
    如何用MathType快速输入公式
    openfire数据库mysql配置
    thinkphp 操作mssql2008
    phpstudy+php5.2+mssql2008
    thinkphp openfire 添加用户 骨架
  • 原文地址:https://www.cnblogs.com/lzh1043060917/p/12759689.html
Copyright © 2011-2022 走看看