思路
这题的关键在于我们如何跳跃要删除的节点。1:首先我们要先计算链表的长度,从而得出我们需要删除节点的索引位置。2:然后我们需要遍历链表然后删除节点最后完成题目
解题方法
从思路中我们可以得到链表的长度(即不断令head=head.next)遍历链表,第二步,我们就开始利用我们的索引了。利用一个while循环,先找出我们要删除节点的前一节点,以及后一节点,利用一个中间量ListNode来进行链接即可。对于index=0&&index=1的情况,特殊解决,当index=0,直接令链表后移即可,当index=1时,重复index>1的操作即可。
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode() {}
* ListNode(int val) { this.val = val; }
* ListNode(int val, ListNode next) { this.val = val; this.next = next; }
* }
*/
class Solution {
ListNode down;
public ListNode removeNthFromEnd(ListNode head, int n) {
int size=1;
ListNode down=new ListNode();
ListNode first=head;//创建一个循环节点用于遍历操作
ListNode start=head;//建立一个链表用于储存答案
while(head.next!=null){
size++;
head=head.next;
}
int index=size-n;
if(index==0){
start=start.next;
}else {
while(index>1){
index--;
/*
进行查询删除节点操作
*/
first=first.next;
}
down=first.next.next;
first.next=down;
}
return start;
}
}