思路
题目地址:https://leetcode-cn.com/problems/remove-nth-node-from-end-of-list/
思路:
- 遍历2次,第一次得出链表长度,第二次上length-n+1的节点
- 双指针,第一个指定先向前移动n次,然后第一个指针和第二个指针同时移动,当第一个指针到达链表的尾节点时,第二个指针到达倒数第n个节点
为了编码方便,在原先的链表上加一个哨兵节点,看代码把
代码
public class Solution {
public ListNode removeNthFromEnd(ListNode head, int n) {
ListNode newHead = new ListNode(0);
newHead.next = head;
// 走在前面的指针
ListNode firstNode = newHead;
// 走在后面的指针
ListNode secondNode = newHead;
int start = 0;
while (start < n + 1) {
firstNode = firstNode.next;
start++;
}
while (firstNode != null) {
firstNode = firstNode.next;
secondNode = secondNode.next;
}
secondNode.next = secondNode.next.next;
return newHead.next;
}
}