今天分享的题目如下:
说一下我们的解题思路:我们要想删除第k个节点,那么指针必须落在k-1节点上,比如我们想要操作题目中的节点4,那么指针必须落在节点3,然后让节点3.next= 3.next.nex
t即可。
所以明白了这个,那么我们传入的是倒数第k个节点,我们如何让他落在他的前一个节点呢?我们只需两个指针。
首先让快慢指针都指向头结点,先让快指针移动k+1次,然后这个时候再将快慢指针同时移动,到最后,慢指针所指向的地方就是我们的目标地址。然后进行删除即可。
具体的代码实现如下:
class Solution {
public ListNode removeNthFromEnd(ListNode head, int n) {
ListNode cur =new ListNode(0,head);
//快指针
ListNode index1 = cur ;
//慢指针
ListNode index2 =cur ;
n+=1;
while(n>0&&index1!=null){
//先让快指针移动n+1次
index1=index1.next;
n--;
}
while(index1!=null){
//快慢指针同时移动
index1=index1.next;
index2=index2.next;
}
//找到目标节点,进行删除操作
index2.next = index2.next.next;
//返回虚拟节点next
return cur.next;
}
}
那么今天的分享就到此结束了,如果有疑问欢迎在文章下方留言。