通过万岁!!!
- 题目:就是给你一个链表,删除他的倒数第n个,然后返回这个链表。
- 思路:我们需要找到倒数第n个前面一个,假设其为temp,然后temp.next = temp.next.next,然后返回头指针即可。关键是我们找到倒数n+1个,这里用到了双指针,我们先存储head指针用来进行返回,然后头指针后移n次,然后temp和头指针一块移动,这样就找到了倒数n+1个,然后继续删除即可。但是存在一个问题,就是我们可能删除的是第一个,这时候,我们移动n次以后,其实就移动到了最后,所以这里需要一个判断,判断为head是不是空,如果他也是空了,那就是表示我们删除第一个,直接return 保存的头节点的next即可。
- 技巧:双指针。
java代码
class Solution {
public ListNode removeNthFromEnd(ListNode head, int n) {
ListNode temp = head, ret = head;
while (n > 0) {
head = head.next;
--n;
}
if (head == null) {// 删除的是第一个
return ret.next;
}
while (head.next != null) {
temp = temp.next;
head = head.next;
}
// 这样temp就是要删除的前面一个
temp.next = temp.next.next;// 删除
return ret;
}
}
- 总结:双指针的题目还是比较多的,也是非常经典的。