美文网首页
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