题意:给出一个单链表,删除从尾部开始的第n个元素
思路:
从头开始遍历n个元素,此时当前结点指向头开始的第n+1个元素。继续遍历同时,另外一个结点记录从头开始至遍历结束时的所经历的结点,这个结点就是要删除结点的前继结点
代码如下:
class ListNode
{
int val;
ListNode next;
ListNode(int x) { val = x;}
}
class Solution
{
public ListNode removeNthFromEnd(ListNode head, int n)
{
ListNode p = head, q = head;
int i = 0;
while (i < n)
{
p = p.next;
i++;
}
if (null == p) return head.next;
while ((p = p.next) != null)
{
q = q.next;
}
q.next = q.next.next;
return head;
}
}