1、前言
题目描述2、思路
这道题一般人都能想到双指针解法,一个 start 一个 end,end 先走 n 步,然后 start、end 一起走,直到 end 走到链表的末尾。
但是需要注意的是,删除的节点有可能就是第一个节点,此时需要特殊处理一下,直接将头节点删除,第二个节点作为首节点返回即可。删除头节点的条件是,end 一下就走到 null 了。
3、代码
class Solution {
public ListNode removeNthFromEnd(ListNode head, int n) {
if(head == null){
return null;
}
ListNode start = head;
ListNode end = head;
while(n > 0){
end = end.next;
n--;
}
// 说明直接去掉第一个
if(end == null){
start = head;
head = head.next;
start = null;
return head;
}
// 说明去掉的不是第一个
while(end.next != null){
start = start.next;
end = end.next;
}
ListNode removeNode = start.next;
start.next = removeNode.next;
removeNode.next = null;
return head;
}
}
网友评论