美文网首页
LeetCode算法题-19. 删除链表的倒数第N个节点(Swi

LeetCode算法题-19. 删除链表的倒数第N个节点(Swi

作者: entre_los_dos | 来源:发表于2019-10-11 12:20 被阅读0次

    来源:力扣(LeetCode)
    链接:https://leetcode-cn.com/problems/remove-nth-node-from-end-of-list
    著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

    题目

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

    示例:

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

    说明:

    给定的 n 保证是有效的。

    进阶:

    你能尝试使用一趟扫描实现吗?

    方法1-一趟扫描,两个快慢节点来实现。

       func removeNthFromEnd(_ head: ListNode?, _ n: Int) -> ListNode? {
            
            let node = ListNode(0)
            var slow: ListNode? = node
            var fast: ListNode? = node //快的节点,先走n个,走完之后,慢节点再走
            
            slow?.next = head
            //快节点,走完n个,还有总长度-n。
            for _ in 1...n {
                
                fast = fast?.next
            }
            //去完n个,剩下的继续
            while fast?.next != nil {
                //慢指针开始动
                slow = slow?.next
                fast = fast?.next
            }
            //跳过倒数第n个。
            slow?.next = slow?.next?.next
            return node.next
        }
    

    相关文章

      网友评论

          本文标题:LeetCode算法题-19. 删除链表的倒数第N个节点(Swi

          本文链接:https://www.haomeiwen.com/subject/hsmzpctx.html