package main
import . "nc_tools"
/*
 * type ListNode struct{
 *   Val int
 *   Next *ListNode
 * }
 */

/**
  * 
  * @param head ListNode类 
  * @param n int整型 
  * @return ListNode类
*/
func removeNthFromEnd( head *ListNode ,  n int ) *ListNode {
    // write code here
    var pWork *ListNode = head
    var pWorkPre *ListNode = nil
    var pCountLen *ListNode = pWork
    var lstLen int = 0
    for pCountLen != nil {    // 确认链表元素个数
        lstLen++
        pCountLen = pCountLen.Next
    }
    
    for lstLen - n + 1 > 1 {    //元素的倒数第N个,就是正着数的第lstLen-n+1个 lstLen就是元素总数
        pWorkPre = pWork
        pWork = pWork.Next
        lstLen--
    }
    if pWorkPre == nil {    //如果要删除的节点为正数第一个,则直接遍历一次,返回指向第二个节点的指针
        pWork = pWork.Next
        return pWork
    }
    
    pWorkPre.Next = pWork.Next
    return head
}