题目
解析
从后开始,方案很简单
- 得到链表总长度
- 计算从前开始第几个
- 找到要删除的节点
- 利用链表功能删除,注意处理边界
边界问题
- 删除的是头节点
伪码
代码
func removeNthFromEnd(head *ListNode, n int) *ListNode {
var Len int
for p := head; p != nil; p=p.Next{
Len++
}
n = Len-n
last := head
del := head
for ;n!=0; n--{
last = del
del = del.Next
}
if del == head {
return head.Next
}
last.Next = del.Next
return head
后记
这里其实不需要记录前一个指针是什么,我们只需要将当前指针指向的内存区域设置为 空指针就可以,但是在 golang 里,我还不会设置!!! 估计要用到 unsafe.pointer,我能将内存区域值设置为全 0,但 全 0 并不代表是 nil。
网友评论