码迷,mamicode.com
首页 > 其他好文 > 详细

19-删除链表的倒数第n个节点(容易造成成环错误)

时间:2020-04-23 11:52:18      阅读:50      评论:0      收藏:0      [点我收藏+]

标签:ret   删除元素   循环   长度   fir   lis   solution   mic   inf   

技术图片

 

 假如链表长度为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;

    }
}

  

19-删除链表的倒数第n个节点(容易造成成环错误)

标签:ret   删除元素   循环   长度   fir   lis   solution   mic   inf   

原文地址:https://www.cnblogs.com/lzh1043060917/p/12759689.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!