题目链接
解题思路
- 双指针法
- 首先创建一个哑节点
ans
,令p = ans
,q = head
- 然后先将
q
节点向后移动n
次 - 这样再同时遍历
p
,q
,当q
到达末尾时,p
正好指向倒数第n - 1
个节点 - 最后令
p.next = p.next.next
AC代码
class Solution {
public ListNode removeNthFromEnd(ListNode head, int n) {
//创建一个哑节点,作为头节点
ListNode ans = new ListNode(0, head);
ListNode p = ans;
ListNode q = head;
for (int i = 0; i < n; i++) {
q = q.next;
}
while (q != null) {
q = q.next;
p = p.next;
}
p.next = p.next.next;
return ans.next;
}
}