由于题中已经表示 n 一定有效,因此不考虑 n 无效的情况。
限定时间复杂度为 O(n), 说明需要在一个循环内完成,因此我们使用前后指针的形式。
使用 pre 表示当前节点 cur 的前一个结点,next 结点表示距离当前结点 cur 为 n 的结点,因此,当 cur 移动到最后一个结点时,此时删除 cur 就完成了题目中的要求。
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 root *ListNode root = &ListNode{Val: 0,Next: nil} root.Next = head var pre *ListNode var cur *ListNode var next *ListNode pre = root cur = head next = head for i:=1;i<n;i++{ next = next.Next } for next!=nil&&next.Next!=nil{ pre = pre.Next cur = cur.Next next = next.Next } pre.Next = cur.Next return root.Next }