19. Remove Nth Node From End of

2022-03-17  本文已影响0人  sarto

题目

解析

从后开始,方案很简单

  1. 得到链表总长度
  2. 计算从前开始第几个
  3. 找到要删除的节点
  4. 利用链表功能删除,注意处理边界

边界问题

  1. 删除的是头节点

伪码

代码

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。

上一篇 下一篇

猜你喜欢

热点阅读