时间复杂度:O(n)
解题思路
利用双指针的快慢指针。首先让快慢指针的间隔为k-1,然后慢指针和快指针同时遍历整个链表,直到快指针指向链表的最后一个节点,此时slow指针指向的节点就是链表中倒数第k个节点。
AC代码
/**
* Definition for singly-linked list.
* type ListNode struct {
* Val int
* Next *ListNode
* }
*/
func getKthFromEnd(head *ListNode, k int) *ListNode {
slow,fast:=head,head
for i:=1;i<k;i++{
fast=fast.Next
}
for fast.Next!=nil{
slow=slow.Next
fast=fast.Next
}
return slow
}
感悟
非常简单的一道题,难度进阶一下就是删除倒数第k个节点,那么就不能让slow指针指向倒数第k个节点了,需要指向倒数第k+1个节点。所以如果是删除倒数第k个节点那么就需要让快慢指针间隔为k而不是现在的k-1。