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
}
网友评论