题解 | #删除链表的倒数第n个节点#
删除链表的倒数第n个节点
http://www.nowcoder.com/practice/f95dcdafbde44b22a6d741baf71653f6
public ListNode removeNthFromEnd (ListNode head, int n) {
ListNode newHead = new ListNode(1);
newHead.next = head;
// write code here
ListNode tmp = newHead;
ListNode pre = newHead;
for (int i = 0; i <= n; i++) {
tmp = tmp.next;
}
while(tmp != null) {
tmp = tmp.next;
pre = pre.next;
}
pre.next = pre.next.next;
return newHead.next;
}
主要思路:
- 删除倒数第n个节点,那么要找到倒数第n+1节点。还是使用快慢指针方法,只不过快指针要先移n+1步,这样之后的慢指针才会移动到pre节点。
- 加入一个头节点处理边界问题。如果没有头节点,那么比如要删除链表的第一个节点,pre节点的边界问题比较棘手。