用哨兵节点删除链表倒N节点!

题目描述:

给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点。

示例1:

给定一个链表: 1->2->3->4->5, 和 n = 2.
当删除了倒数第二个节点后,链表变为 1->2->3->5.

解题思路:

首先我们思考,让我们删除倒数第N个元素,那我们只要找到倒数第N个元素就可以了,那怎么找呢?我们只需要设置两个指针变量,中间间隔N-1元素。当后面的指针遍历完所有元素指向nil时,前面的指针就指向了我们要删除的元素。 如下图所示:

现在我们来完整捋一遍解题过程:

  1. 首先我们定义好哨兵节点result,指向哨兵节点的目标元素指针cur,以及目标指针cur的前一个指针pre,此时pre指向nil。
  2. 接下来我们开始遍历整个链表。
  3. 当head移动到距离目标元素cur的距离为N-1时,同时开始移动cur。
  4. 当链表遍历完之后,此时head指向nil,这时的cur就是我们要找的待删除的目标元素。
  5. 最后我们通过pre.Next = pre.Next.Next完成删除操作,就完成了整个解题过程

 

func removeNthFromEnd(head *ListNode, n int) *ListNode {
    result := &ListNode{}
    result.Next = head
    var pre *ListNode
    cur := result
    i := 1
    for head != nil {
        if i >= n {
            pre = cur
            cur = cur.Next
        }
        head = head.Next
        i++
    }
    pre.Next = pre.Next.Next
    return result.Next
}

  地址:https://mp.weixin.qq.com/s?__biz=MzAxMjE5NTk0NQ==&mid=2247485762&idx=1&sn=d5fbe4e09181f0e465b7bfcc42d9ad35&chksm=9bb4c844acc34152871a002945f5feb54fca9a45d85c56217d9a8c0709bd3c9dde4448c6fb44&scene=21#wechat_redirect

small_lei_it 技术无止境,追求更高。
原文地址:https://www.cnblogs.com/smallleiit/p/13605926.html