标签: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;
}
}
标签:ret 删除元素 循环 长度 fir lis solution mic inf
原文地址:https://www.cnblogs.com/lzh1043060917/p/12759689.html