题解 | #删除链表的倒数第n个节点#
删除链表的倒数第n个节点
http://www.nowcoder.com/practice/f95dcdafbde44b22a6d741baf71653f6
快慢指针。删除链表倒数第n个节点。
public class Solution { /** * * @param head ListNode类 * @param n int整型 * @return ListNode类 */ public ListNode removeNthFromEnd (ListNode head, int n) { //方法二:快慢指针 if (head == null || head.next == null) return null; ListNode runner = head,chaser = head;//快慢指针 while (n > 0){//让快指针前进n步 runner = runner.next; n--; } if (runner == null) {//如果快指针已经为空,说明头结点即为待删除的结点 return head.next;//直接返回头结点的下一个结点 } while (runner.next != null){//快慢指针同时后移,直到快指针下一结点为空时停下 runner = runner.next; chaser = chaser.next; } chaser.next = chaser.next.next;//此时慢指针的后继结点刚好是待删除的结点 return head; } }