Leetcode第十九题:删除链表的倒数第n个节点

题目描述:

给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点。
示例:给定一个链表:1->2->3->4->5,和n=2;
当删除了倒数第二个节点后,链表变为 1->2->3->5.

思路:
方法一:两次遍历法:
删除从列表开头数起的第 (L−n+1) 个结点,其中 L是列表的长度;

首先在链表的开头添加一个新的空节点,目的就是为了解决特殊情况:删除链表的头结点和当链表只有一个节点时的情况;然后进行第一次遍历,找到链表的长度L,然后进行第二次遍历到(L-n)的节点的位置,该节点就是需要删除的节点,然后进行链表中删除指定节点操作;

方法二:一次遍历法:
我们可以使用快慢指针法;给出p和q两个指针指向头结点,让q先走n步,然后p和q同时走,当q走到NULL时,p刚好走到要删结点的前一个节点,然后用删除链表中指定结点的方法删除该节点;
(我们用第二种方法进行求解)

代码如下:
Leetcode第十九题:删除链表的倒数第n个节点