美文网首页
剑指 Offer 22. 链表中倒数第k个节点

剑指 Offer 22. 链表中倒数第k个节点

作者: 邦_ | 来源:发表于2022-03-10 19:18 被阅读0次

func getKthFromEnd(_ head: ListNode?, _ k: Int) -> ListNode? {
        var tempNode = head
        var endNode = head

        var count = 0
        var index = 0

        while tempNode != nil {
            
            tempNode = tempNode?.next
            count += 1
        }
        

        while endNode != nil {
            endNode = endNode?.next
            if index == count - 1 - k {
                return endNode
            }
            index += 1

        }
        
        return head

    }


最笨的方法。。先获取总共有多少个节点 然后到需要的节点的时候 返回 总感觉不应该这么简单 应该有更巧妙的办法。。 于是。。看了解题 双指针

两个指针刚开始都指向头结点 然后让前边先走k个位置 这样两个指针的间隔就是k了
然后两个指针一起移动 当前边的走到头的时候 后边的就在倒数第k个位置了


func getKthFromEnd(_ head: ListNode?, _ k: Int) -> ListNode? {
         var front = head
        var behind = head
        
        for _ in 0..<k {
            
            if front != nil {
                front = front?.next
            }
            
        }
        
        while front != nil {
            
            behind = behind?.next
            front = front?.next
            
        }
        
        return behind

    }


相关文章

网友评论

      本文标题:剑指 Offer 22. 链表中倒数第k个节点

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