go解题答案

  • 时间复杂度O(n)
  • 思路概括:双指针
  • 思路核心:
    1、先计算链表长度
    2、再找到要删除的节点前一个,然后删除
    func removeNthFromEnd( head *ListNode ,  n int ) *ListNode {
      // write code here
      size:=0
      cur:=head // 第一个临时指针,为了计算size
      cur2:=head //第二个临时指针,为了找到要删掉的节点
      ans :=ListNode{}
      ans.Next=cur2 // 第三个指针,为了返回结果
      // 计算size
      for cur!=nil {
          size+=1
          cur=cur.Next
      }
      // 处理特殊情况
      if size-n==0{
          cur2=cur2.Next
          return cur2
      }
      // 找到要删除节点的上一个节点,所以-1
      for i:=0;i<size-n-1;i++{
          cur2=cur2.Next
      }
      cur2.Next=cur2.Next.Next
      return ans.Next
    }

    如果有帮助请点个赞哦, 更多文章请看我的博客

    题主背景

  • 从业8年——超级内卷500Q技术经理——目前专注go和微服务架构