今天练习的百度第二题
这道题我以前在b站上面讲过,按理说应该是做的上但是今天用的是另一个方法
- 给定一个链表,删除链表的倒数第n个节点并返回链表的头指针
例如,
给出的链表为:1->2->3->4->5, n= 2.
删除了链表的倒数第n个节点之后,链表变为1->2->3->5.
题目保证n一定是有效的
请给出请给出时间复杂度为\ O(n) O(n)的算法
示例1
输入
{1,2},2
返回值
{2}
import java.util.*;
/*
* public class ListNode {
* int val;
* ListNode next = null;
*
*/
public class Solution {
public ListNode removeNthFromEnd (ListNode head, int n) {
ListNode index=head;
ListNode result=head;
int length=0;
while(index!=null){
length++;
index=index.next;
}
length=length-n;
//这部一定记得如果删除第一个节点应该怎么办
if(length==0){
result=result.next;
return result;
}
for(int i=0;i<length-1;i++){
result=result.next;
}
result.next=result.next.next;
return head;
}
}
这里有几个思路
-
我们这次求出链表长度之后在删除求出链表长度的代码
在这
int length=0;
while(index!=null){
length++;
index=index.next;
} -
之后就是特殊节点如果是第一个就返回head.next
-
题中给的倒数所以我们要length=length-n
-
再有最后一个
.for(int i=0;i<length-1;i++){ result=result.next; }
length-1为了让你不用便利到n那个节点的下表n-1 -
删除链表节点
result.next=result.next.next